[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 2chのread.cgiへ]
Update time : 04/07 07:33 / Filesize : 179 KB / Number-of Response : 816
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

Win32API質問箱 Build54



1 名前:デフォルトの名無しさん [2007/06/12(火) 19:59:25 ]
スレ立てるまでもない、Win32APIのついての質問はこちらへどうぞ。
やさしいお兄さんやお姉さんたちが答えてくれるかも。

過去スレ、関連リンクは>>2-5くらい。

■注意
・質問する前にMSDNライブラリやPlatformSDK、Google等で検索しましょう。
・日本語版MSDN Online Libraryは不完全です。英語版(msdn.microsoft.com/library/)の利用推奨。
・APIフックなど高度な事をしたい場合はできるだけAdvenced Windowsを読みましょう。
・言語特有の問題やIDE、MFCやVCLなどの質問はそれぞれの言語や開発環境スレで

754 名前:デフォルトの名無しさん [2007/07/12(木) 00:11:18 ]
crt no source ha iduko?

755 名前:デフォルトの名無しさん mailto:sage [2007/07/12(木) 00:16:52 ]
>>754
Visual C++ならVisual C++のフォルダ(bin, include, libなどがあるフォルダ)
にあるcrtというフォルダ。ただし、Expressには付属していない。

756 名前:デフォルトの名無しさん mailto:sage [2007/07/12(木) 01:06:41 ]
GlobalAllocとLocalAllocの違いがわからない

757 名前:デフォルトの名無しさん mailto:sage [2007/07/12(木) 01:15:16 ]
ここにわかりやすい解説が

konuma.txt-nifty.com/blog/2006/03/heapallocvirtua_5d49.html

758 名前:デフォルトの名無しさん mailto:sage [2007/07/12(木) 01:15:35 ]
Win16では、nearポインタ・farポインタの違いがあったが、
Win32では違いなし。
もしかしたら9xではだめかもしれないが、
NTでは、GlobalAllocしたものをLocalFreeすることすら可能なはず。

759 名前:デフォルトの名無しさん mailto:sage [2007/07/12(木) 01:35:59 ]
Windows 3.1 SDK のヘルプからコピペしてみた。Win32では殆ど無意味だけど。
Global memory is all memory in the system that has not been allocated by an application or reserved by the system.
Local memory is the memory in the data segment of a Windows application.

760 名前:デフォルトの名無しさん mailto:sage [2007/07/12(木) 01:51:49 ]
LocalAllocは内部でHeapAllocと同じ事してるんだろ確か

761 名前:デフォルトの名無しさん mailto:sage [2007/07/12(木) 02:35:41 ]
ぶっちゃけ、何かの理由がない限り、
HeapCreate()の引数dwMaximumSizeには0を指定するわけで、
ということは、HeapAlloc()で巨大なメモリを確保しようとしたら、
自動的にVirtualAllocに飛ばされるわけで、
意識してVirtualAllocを呼ばなくてもいいんじゃないかな。

それどころか、C++ なら 何か理由がない限り、new 一択だろう。
もしヒープの速度がネックになるようなら、
ヒープ上ではなくスタック上に取れるようなアルゴリズムを検討すべき。

自分は遅いプログラムのチューニングをしていて、
ヒープの速度がネックになっているのを見たことがないよ。

762 名前:デフォルトの名無しさん [2007/07/12(木) 08:28:40 ]
>>755
thank u. express dakara nakata



763 名前:デフォルトの名無しさん mailto:sage [2007/07/12(木) 14:49:19 ]
Local/GlobalAllocって、戻り値が専用型なもんで、「解放する方法が明確に解る」
って理由で外部にAPI公開するDLLなんかでは採用してる例がある。

確かにポインタだけ返して「解放はVirtualFreeで」とかいう仕様だと勘違いで
他の解放関数に渡してしまうケースが無いともいえない。


764 名前:デフォルトの名無しさん mailto:sage [2007/07/12(木) 14:59:06 ]
>>761
>自分は遅いプログラムのチューニングをしていて、
>ヒープの速度がネックになっているのを見たことがないよ。

漏れもそんなのは見たことないが、malloc/free 系と memcpy 系の
関数を差し替えるのは、ほとんど手間がかからずある程度の効果が
期待できるのでまず手始めにやっちゃうな。

765 名前:デフォルトの名無しさん mailto:sage [2007/07/12(木) 15:00:00 ]
そんな怪しい挙動するくらいなら、解放するAPI用意したほうがいいと思うんだけどなぁ・・・

766 名前:デフォルトの名無しさん mailto:sage [2007/07/12(木) 15:05:04 ]
IMalloc/CoTaskMemAllocはどうよ

767 名前:デフォルトの名無しさん mailto:sage [2007/07/12(木) 15:09:25 ]
COM のときは使うな CoTaskMemAlloc 。

768 名前:デフォルトの名無しさん mailto:sage [2007/07/12(木) 15:12:36 ]
>>761
それはプロファイラに捕捉されてないだけだと思うぞ。
ヒープは頻繁に呼ばれるので、僅かなコストが積もって大きくなる。
InitializeCriticalSectionAndSpinCount()のスピンカウントの説明を読めば片鱗が知れよう。

とはいえ、下手なアルゴリズムやコーディングによる遅さに比べれば、微々たるものだが。

769 名前:デフォルトの名無しさん mailto:sage [2007/07/12(木) 15:16:19 ]
カーソルの影って、APIでオンオフはできるんですけど、そもそもシステムカーソルにしか
適用されませんよね。

とあるアプリで独自のカーソルにも影が付くのがあったんで、リソースを見てみましたけど
元カーソルは影付きではありませんでした。
影を付けるAPIみたいなのはあるんでしょうか?


770 名前:デフォルトの名無しさん mailto:sage [2007/07/12(木) 15:16:46 ]
>>768
google mallocの話とか、読み物としてはおもしろいからなぁ。
ttp://slashdot.jp/comments.pl?sid=364575&cid=1172165

まあ初心者の手の届かないところに保管しておくべき話だけどね。


771 名前:デフォルトの名無しさん mailto:sage [2007/07/12(木) 16:27:02 ]
>>770
gccやglibcにパフォーマンスを要求すること自体が間違ってる。
ポータブルでフリーであることが目的で、ちゃんと動けば十分という代物なんだから。

ついでに言うと、
unixの世界ではプロセスをポコポコforkする文化が長かったし、
フリーのOSはSMP性能が悪いのが普通だった。
パフォーマンスよりも、動くこと、簡単なことが優先されてた。

バグの原因になるのでmallocしたメモリはfreeするな
なんて真顔で言う連中が跋扈していた世界だから。


772 名前:デフォルトの名無しさん mailto:sage [2007/07/12(木) 16:29:36 ]
>>771
過去がどうであれ、今それを真顔で言われてもわりと困るんだが。



773 名前:デフォルトの名無しさん mailto:sage [2007/07/12(木) 18:00:59 ]
要は、Linuxの世界は後発であるが故に遅れている、ということ。
もちろんLinux上で走るからといって、glibcを使う必要はないわけで、
フリーだろうがプロプライエタリだろうが、別のライブラリを使えばいいだけのこと。

ただ、何でもかんでも別のライブラリを使うのが良いとは限らない。
Windowsのバージョンが上がると、
MSVCRTやOSのヒープマネージャが、
より現状のPC環境に向いたものに変るので。


774 名前:デフォルトの名無しさん mailto:sage [2007/07/12(木) 18:14:22 ]
Unixについて言ってるのかLinuxについて言ってるのかはっきりしろと。

775 名前:デフォルトの名無しさん mailto:sage [2007/07/12(木) 18:18:23 ]
ていうかスレ違い

776 名前:デフォルトの名無しさん mailto:sage [2007/07/12(木) 18:22:26 ]
IDEのバスをリセットする(RESET#端子をアサートする)方法を教えてください。

IDEのデバイスに対してDEVICE RESETコマンドを送ることはできたのですが、
いざデバイスがハングアップした状態では、コマンドも受けとってもらえないわけで。


777 名前:デフォルトの名無しさん mailto:sage [2007/07/12(木) 20:48:02 ]
Documents and Settings\ユーザー名\NTUSER.DATとかの
OS可動中に開けないファイルを読み込み専用で良いので
開く方法を教えてください。
破壊がないか定期的にチェックをしたいので。

778 名前:デフォルトの名無しさん mailto:sage [2007/07/12(木) 20:54:30 ]
ACPIが有効なPC上で、CPU温度を定期的に取得する方法を教えてください。
以下のvbsを実行すれば温度を取得できるのですが、
一定間隔で実行しても温度に変化がありません。
(OS起動時に一度だけ取得してる様に見える)
なんとか更新させるか、別の方法がないか探してます。


cputemp.vbs------------------------------
Set fs = CreateObject("Scripting.FileSystemObject")
Set outFile = fs.CreateTextFile("CPUtemp.txt", True)
Set wbemServices = GetObject("winmgmts:" & "\\localhost\root\wmi")
Set wbemObjectSet = wbemServices.InstancesOf("MSAcpi_ThermalZoneTemperature")
For each Item in wbemObjectSet
outFile.WriteLine "CPU Temperature: " & (Item.CurrentTemperature - 2732) / 10 & "°C"
Next
outFile.Close
cputemp.vbs------------------------------

779 名前:デフォルトの名無しさん [2007/07/12(木) 21:15:07 ]
みんなやたら高度だな

780 名前:デフォルトの名無しさん mailto:sage [2007/07/12(木) 21:43:08 ]
PatchGuardてIATへの書き込みもガードするんですか?

カーネル領域でないのにガードされるんですか?(´;ω;`)

教えてエロい人(´・ω・`)

781 名前:デフォルトの名無しさん mailto:sage [2007/07/12(木) 21:43:20 ]
>>777
2003 Server以降なら、シャドー・コピーという手がある。

XPの場合はAPIとして表には出ていないがntbackupが使っている。
ダサい方法だが、ntbackupを子プロセスとしてキックして、
目的のファイルにバックアップ取って、
すぐさまntbackupで別の場所にリストアするという手がある。

ちなみに、
CreateFileでFILE_FLAG_BACKUP_SEMANTICSつけてダメだった?

782 名前:デフォルトの名無しさん mailto:sage [2007/07/12(木) 22:19:02 ]
>>781
色々ありがとうございます。
SE_BACKUP_NAME、SE_RESTORE_NAMEの特権を取得した後、

{ HANDLE h;
h = CreateFile("C:\\Documents and Settings\\user\\NTUSER.DAT"
,GENERIC_READ
,FILE_SHARE_READ
,0
,OPEN_EXISTING
,FILE_FLAG_BACKUP_SEMANTICS // FILE_ATTRIBUTE_NORMAL|
,0
);
if (h != INVALID_HANDLE_VALUE) {
printf("pass\n");
CloseHandle(h);
} else {
printf("ng\n");
}
}
の様にしましたがダメでした。
ntbackupの方法も検討してみます。



783 名前:デフォルトの名無しさん mailto:sage [2007/07/12(木) 22:33:25 ]
ちなみにGetLastErrorのコードは
CreateFile 20h:プロセスはファイルにアクセスできません。別のプロセスが使用
中です。
でした。

784 名前:デフォルトの名無しさん mailto:sage [2007/07/12(木) 22:35:30 ]
FILE_SHARE_WRITEとFILE_SHARE_DELETEも付けたほうがいいよ。


785 名前:デフォルトの名無しさん mailto:sage [2007/07/12(木) 22:37:19 ]
FILE_SHARE_WIFEとFILE_SHARE_DAUGHTERもつけたほうがいいよ

786 名前:784 mailto:sage [2007/07/12(木) 22:40:26 ]
MSDNライブラリのCreateFileのFILE_SHARE何とかのところには、
"Subsequent open operations"と書かれているけど、
それは自分が一番最初にCreateFileする時の話で誤解がある。

実際には、同時にオープンする他者全員に対しての許可なので、
FILE_SHARE_WRITEを付けない = 許可しない場合には、
すでにWRITE有りでオープンしている人がいると、エラーになる。

787 名前:デフォルトの名無しさん mailto:sage [2007/07/12(木) 22:45:51 ]
>>781
ntbackupでバックアップ/別フォルダへのリストアに成功しました。
コマンドラインオプションから指示を出せる様なので、
この方法でできそうです。
ありがとうございました。

788 名前:デフォルトの名無しさん mailto:sage [2007/07/12(木) 22:50:39 ]
>>784
,FILE_SHARE_DELETE|FILE_SHARE_WRITE|FILE_SHARE_READ
としましたが同じエラーでした。


789 名前:デフォルトの名無しさん mailto:sage [2007/07/12(木) 23:16:10 ]
>>777
そんなこと聞く人が破壊がないかチェックなんてできるの?


790 名前:デフォルトの名無しさん mailto:sage [2007/07/12(木) 23:20:40 ]
楽勝だよ

791 名前:778 mailto:sage [2007/07/12(木) 23:26:06 ]
>>778お願いします。
できないと死にそうです。


792 名前:デフォルトの名無しさん mailto:sage [2007/07/12(木) 23:28:24 ]
出来ないと死にそうなくらい、ヤバい温度になるのか?



793 名前:デフォルトの名無しさん mailto:sage [2007/07/12(木) 23:37:07 ]
>>789
たぶんレジストリの内容をまとめて盗むスパイウェアでも作ってるんだろう。

>>791
自分だったらACPIではなく、SMBus(I2C)で温度センサーの値を読むが。

794 名前:デフォルトの名無しさん [2007/07/12(木) 23:46:24 ]
>>792
部屋が灼熱地獄なんです
熱中症になる前にお願いします

795 名前:デフォルトの名無しさん mailto:sage [2007/07/12(木) 23:47:57 ]
>>761
標準の new は、小さなサイズの要求を大量に行うと、
メモリを無駄に使用してしまう。

数年前でも2GBのメモリ空間はかなり窮屈で
無駄にされるとかなり痛いので、
自前のアロケータを書いたことがある。


796 名前:デフォルトの名無しさん mailto:sage [2007/07/12(木) 23:51:50 ]
>>793
何故ですか?
センサー毎にハードコーティング要るんじゃかったですか?
そんな馬鹿馬鹿しい事やってられません

797 名前:793 mailto:sage [2007/07/12(木) 23:56:49 ]
>>796
SpeedFanやEverestなどのメジャーなツールが取っている手段だから。
できるかどうかわからない方法を調べるよりは、
できることがわかっている方法を調べるほうがいいでしょ。

798 名前:デフォルトの名無しさん mailto:sage [2007/07/12(木) 23:57:58 ]
>>793
>SMBus(I2C)で温度センサーの値を読むが。
どのようにするのですか?
なんか、デバドラ作らないと出来ないような気がしますが、
簡単にAPIで値読めるのですか?

799 名前:デフォルトの名無しさん mailto:sage [2007/07/13(金) 00:00:56 ]
>>795
数年前なら、64ビットが選択肢に入ってたろうに。

自分ならまず設計を見直すよ。
大量にnewするオブジェクトたちが、本当に個別に寿命管理が必要なのか、と。


800 名前:デフォルトの名無しさん mailto:sage [2007/07/13(金) 00:11:43 ]
Boost.Pool最強説

801 名前:795 mailto:sage [2007/07/13(金) 00:20:51 ]
>>799
漏れは、マシンもOSも調達されてから投入されたので、
64bit化しようとは、流石にいえない。
そもそも、実装されるメモリの量も余裕は無かったし。

個別の寿命管理は確実に必要だったと今振り返っても思うよ。

802 名前:デフォルトの名無しさん mailto:sage [2007/07/13(金) 00:28:50 ]
つーか温度計る手段がいまだに規格化されてないってのがアホだよな
WMIで得られる筈が>>778みたいな半端な物で形骸化してるみたいだし
今ではデスクトップPCでさえサスペンド/レジュームする時代なんだぜ



803 名前:デフォルトの名無しさん mailto:sage [2007/07/13(金) 01:06:26 ]
homepage.mac.com/raktajino/cputhermometer/cputhermometer.html

804 名前:デフォルトの名無しさん mailto:sage [2007/07/13(金) 01:07:30 ]
forum.windowspower.de/thread.php?threadid=6907
freshmeat.net/projects/phptherm/
www.footslog.com/board/Forum6/HTML/000338.html

805 名前:デフォルトの名無しさん mailto:sage [2007/07/13(金) 02:33:43 ]
>>803
(゚д゚)ハァ?

806 名前:デフォルトの名無しさん mailto:sage [2007/07/13(金) 03:01:36 ]
>>787
もしVistaで動かす予定があるならntbackupは廃止されたから
まじめにボリュームシャドウコピーを使う方法も併用する必要がある

807 名前:デフォルトの名無しさん mailto:sage [2007/07/13(金) 07:17:28 ]
>>802
計測ってより計測法でも利権が絡むからね。

808 名前:デフォルトの名無しさん mailto:sage [2007/07/13(金) 08:05:05 ]
>>801
それは、
何かよほどのこと
って奴だったんだよ、たぶん。

ラージアドレス(/3GB)を使ってもアドレス空間が足りないが、
かといってPAEなんて使いたくないという場合には、
いっそのことプロセスを分けてしまうという手もある。
プロセスを跨ぐオーバーヘッドが巨大だけどね。

809 名前:デフォルトの名無しさん mailto:sage [2007/07/13(金) 08:09:20 ]
>>806
強引な荒技もあるよ。

デフラグのAPIを使ってファイルのディスク上の所在を調べて、そこを直に読んでしまうという手もある。
もちろん、そんな行儀の悪いことは、よほどの理由がないとダメだが。

810 名前:デフォルトの名無しさん [2007/07/13(金) 17:13:50 ]
CreateProcessでCREATE_SUSPENDEDを利用してNotepad.exeを起動して、
とまってるときのMessageBoxAとMessageBoxWのアドレスと、

その後、ResumeThreadした後のMessageBoxAとMessageBoxWのアドレスが違うような気がするんですけど、
これって気のせいですか?

811 名前:デフォルトの名無しさん mailto:sage [2007/07/13(金) 17:17:33 ]
DefineDosDevice()で、特定のフォルダを新規ドライブとしてマウントできるけど、
そのとき、元のフォルダのほうをACLなりEFSなりで自プロセス以外から見えなくすることは可能?




812 名前:デフォルトの名無しさん mailto:sage [2007/07/13(金) 17:53:48 ]
>>810
CREATE_SUSPENDEDで作成されたプロセスは初期化が完了している保証は無い



813 名前:デフォルトの名無しさん mailto:sage [2007/07/13(金) 18:37:58 ]
むしろ初期化終わってないのが普通じゃない?
この段階だとGetModuleFileNameExのようなAPIが失敗するもんで、
どうやってこの初期化だけを完了させるのか知りたかったりする
(forでResume/sleep/Suspendを細切れにしてまわしてた)

814 名前:デフォルトの名無しさん mailto:sage [2007/07/13(金) 18:45:57 ]
PEヘッダ解析して、PE.EntryPointのアドレスを書き換えるか、
ブレークポイントをしかけておくってのはどうだい?

815 名前:デフォルトの名無しさん mailto:sage [2007/07/13(金) 19:50:28 ]
CREATE_SUSPENDEDで止まっているときに色々やるのはオススメしない。

Windowsのサービスパックで挙動が変るのならまだしも、
WindowsUpdateで配られるモジュールのアップデートで挙動が変ってしまうから。

安全なのはプロセスのエントリポイントを乗っとること。






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<179KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef