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などの質問はそれぞれの言語や開発環境スレで
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で配られるモジュールのアップデートで挙動が変ってしまうから。 安全なのはプロセスのエントリポイントを乗っとること。