Win32API質問箱 Build ..
548:デフォルトの名無しさん
08/05/03 09:55:50
>>546
日本語
グーグルで調べろよこのカスが!
って意味
549:デフォルトの名無しさん
08/05/03 11:06:16
通りがかりですみませんが、>>525 を見ての便乗質問です。
> デスクトップのListViewに
> PostMessage(hwnd, LVM_INSERTITEM, 0, 0xcccccccc);
> とかすると落ちる
これって、単に LVM_INSERTITEM における実装の怠慢なのでしょうか。
それとも、一般にウィンドウプロシージャ側ではポインタとして
与えられたパラメータの妥当性はチェックしないものなのでしょうか。
推測ですが、いちいちポインタの妥当性をチェックするのは面倒だし
実行時間もかかるので、チェックは行っていないような気がします。
しかしそうすると、他のプロセスからのウィンドウメッセージによる
攻撃を受け入れてしまうことになりますよね。
先輩プログラマの皆さんはどのようにコーディングされていますか?
550:デフォルトの名無しさん
08/05/03 11:34:17
よっぽどセキュリティに気をつかった実装でもなけりゃ、他のプロセスからの
悪意のメッセージ攻撃なんて想定しない。
悪意のあるプロセスが実行されている時点でそのマシンはもうダメなんだし、
ターミネートプロセスされたらどうするんだって話になる。
ただ、パラメータチェックすること自体は、
バグ対策とか、モジュールの独立性確保の意味で普通にやるだろ。
551:デフォルトの名無しさん
08/05/03 11:40:58
そもそもプロセス超えているんだから、おまえのメモリアドレス渡しても動くわけが無いだろ。
ちょっとは考えろよ。
Windowsが面倒を見てくれるのは一部の文字列をやり取りするメッセージだけだ。
LVM_INSERTITEMはWM_USERなんだから、ウインドウクラス独自のメッセージなんだよ。
だからプロセスをまたいでやり取りはできない。
どうしてもやりたきゃ、相手のプロセスにコード注入しやがれ。
552:デフォルトの名無しさん
08/05/03 11:49:53
> LVM_INSERTITEMはWM_USERなんだから
ハイ、知ったか乙
553:デフォルトの名無しさん
08/05/03 12:15:11
WM_USERは0x0400〜0x7FFFで、LVM_INSERTITEMは0x1000 +7 or +77だから
WM_USERの範囲内にあるな。
554:デフォルトの名無しさん
08/05/03 12:21:15
WM_USERなんて名前だから、自作アプリの独自メッセージはそこから使えって意味だと思ってた俺。
そういうのはWM_APPからって、ややっこしいんだよ!逆だろ名前!
せめてWM_USERだけでもなんとかならんかったのか。
555:デフォルトの名無しさん
08/05/03 12:26:55
WM_USER+???を使っている物(Toolbarなど)と、そうでない物(ListViewなど)があるのは何故だろう
何か理由でもあるのだろうか・・・
>>554
Win16→Win32でコモンコントロールが大量に追加されてWM_USER未満では足りなくなったから
WindowsのコントロールがWM_USER以降を使うようになってWM_APPが定義されたかと
Win16時代のAPIヘルプにはこう書いてある。
> 0〜WM_USER − 1 Windowsが使用するために予約されているメッセージです。
> WM_USER〜0x7FFF プライベート ウィンドウ クラスが使用する整数メッセージです。
> 0x8000〜0xBFFF Windowsが使用するために予約されているメッセージです。
> 0xC000〜0xFFFF アプリケーションが使用する文字列メッセージです。
556:デフォルトの名無しさん
08/05/03 12:31:46
こういう話は面白いから許容
557:デフォルトの名無しさん
08/05/03 12:34:06
WM_USERはuser32.dllが使う場所かと思っていました
558:549
08/05/03 13:03:19
>>550
どうもありがとうございます。そういうことになりそうですね…。
確かに、他から TerminateProcess できてしまうことを考えると、
悪意のある攻撃を想定することはあまり意味がないですね。
>>551
>>549 の説明不足でしたかね…すみません。
ポインタの値が、プロセス境界を超えた時点で意味がなくなることは理解しています。
動作させたいのではなく、他のプロセスからの無意味なアクセスを拒否したかったのです。
559:デフォルトの名無しさん
08/05/03 13:17:38
>>558
じゃ具体的にどうやるんだ。
誰がメッセージを送ったのか知る方法は無いぞ。
アドレスだって、予約されてるとか、コミットされてるぐらいしかわからん。
560:デフォルトの名無しさん
08/05/03 13:19:10
同一デスクトップ内の同一権限のアプリにイタズラされることを想定するなんて
かなーり無意味なことだと思うが
561:デフォルトの名無しさん
08/05/03 14:16:05
そういう事が簡単に出来てしまうのもどうかと思うぞ
今更変えられないのも分かるけどな
562:549
08/05/03 14:18:00
>>559
アドレスから直接判断するのは難しいので、例えば __try 〜 __except の
中で中身を読んで値をチェックすれば可能かなと思っていました。
もちろん、この方法にも限界があるような気はしますけど…。
>>560
そうかもしれません。ただ、仮に攻撃を想定しないでコーディングして、
>>525 に書かれているようなことをされてアプリが落ちてしまったとき、
実際は送った側に問題があるにもかかわらず、落ちたアプリの側に
問題があるように見えてしまうのが気持ち悪かったというのはあります。
563:デフォルトの名無しさん
08/05/03 14:46:14
気持ち悪さの解消のためにここまで引っ張ったのかよ
あほらしい
564:デフォルトの名無しさん
08/05/03 14:59:13
↑話を理解してない馬鹿
565:デフォルトの名無しさん
08/05/03 15:04:37
↑話を理解してない馬鹿
566:549
08/05/03 15:07:30
>>563
ちょっと気になったものですから、この機会に質問させていただきました。
私の疑問は >>550 さんのお返事で解消できましたのでこれにて消えることにします。
他にも不快な思いをした方がいらっしゃいましたら、申し訳ありませんでした。
567:デフォルトの名無しさん
08/05/03 15:09:52
vertualalloc使えば、相手プロセスがアクセス出来たんだったかな
これは、それ使ってるんじゃない?
URLリンク(www.yoshibaworks.com)
568:デフォルトの名無しさん
08/05/03 15:13:19
>>567
それはVirtualAlloc、WriteProcessMemory、CreateRemoteThread辺りでDLL注入してるだけじゃないの
569:デフォルトの名無しさん
08/05/03 15:13:58
IsBadReadPtr でも使っとけ
570:デフォルトの名無しさん
08/05/03 15:20:18
>>569
obsoletedだ馬鹿
571:デフォルトの名無しさん
08/05/03 15:29:02
ところで、obsoleteを動詞として使う用法ってどの程度一般的なの?
辞書によっては載ってるのと載ってないのとあるんだけど。
572:デフォルトの名無しさん
08/05/03 15:29:08
vertualalloc(笑)
どこをどうすればそんな勘違いして覚えられるんだよww
573:デフォルトの名無しさん
08/05/03 15:31:30
ローマ字読みです
574:デフォルトの名無しさん
08/05/03 15:33:58
URLリンク(www.rfc-editor.org)
obsoletedなんて単語はrfcでも使われてないな
575:デフォルトの名無しさん
08/05/03 16:19:20
>>573
ローマ字読みでもベーチャルだろ
つうかAPI名をスペルミスする奴は打ち慣れてない(=スキルが浅い)証拠だと思うな
で、誰だよSHStripMneumonicなんてミスした奴w
せめて#defineで間違ってない名前でも定義しとけっつーの
576:デフォルトの名無しさん
08/05/03 17:00:58
>>571
m-wによると、1640年からだそうだ。
--
Main Entry: 2obsolete
Function: transitive verb
Inflected Form(s): obsolet・ed; obsolet・ing
Date: 1640
: to make obsolete
--
577:デフォルトの名無しさん
08/05/03 17:48:34
>>571はどの程度一般的かを聞いてるのであって
何時から使われ出したかなどとは聞いていない
578:デフォルトの名無しさん
08/05/03 23:04:35
外野は黙っとけの典型例だな。なに文句付けてるんだか。
579:デフォルトの名無しさん
08/05/03 23:12:46
>>578
お前も外野だろ
そして俺も
580:デフォルトの名無しさん
08/05/03 23:13:53
BNCで引いたらobsoletedを動詞で使ってる用例が3件だけあった。形容詞は340件だった。
581:デフォルトの名無しさん
08/05/04 00:14:19
くだらん足の引っ張り合いしてんなよ。見苦しい。
ところで、自作アプリ内で動画再生したいんだけど、Media PlayerとDirect Showどちらを使うのが良い?
582:デフォルトの名無しさん
08/05/04 00:17:24
好きな方を使うとよい
583:デフォルトの名無しさん
08/05/04 00:56:22
エディットコントロールでDrawTextのDT_WORDBREAKみたいに自動で改行してくれるように
するにはどうすればいいですか?
584:デフォルトの名無しさん
08/05/04 01:52:30
横スクロールバーを消す
585:デフォルトの名無しさん
08/05/04 02:34:26
>>581
自前でデコード+DirectGraphicsで描画
586:デフォルトの名無しさん
08/05/04 02:59:12
>>584
ありがとう、できた
587:デフォルトの名無しさん
08/05/04 03:28:57
DialogBoxやCreateDialogを使わず、CreateWindow等を使って同じ事をする場合、どう書きますか
588:デフォルトの名無しさん
08/05/04 03:56:52
ひたすらコントロールを作りまくる
589:デフォルトの名無しさん
08/05/04 05:39:07
>>588
dialog base unitの座標変換もやってる?
絵とか貼ると、どうせズレるからおれは無視してる。
590:デフォルトの名無しさん
08/05/04 05:45:56
そんな物無視でいいだろ
無視しないで中途半端に絵とか貼ってもXPのダイアログみたいに
アイコンやビットマップが潰れてかえって見づらいだけ
591:デフォルトの名無しさん
08/05/04 05:47:47
質問が悪かったです。
DialogBox等はCreateWindowExを使ってダイアログを生成してると書いてありました。
どのようにCreateWindowExを使ってるのか知りたかったです。
592:デフォルトの名無しさん
08/05/04 06:23:19
>>581
VFW関数にフレームを1枚ずつデコードしてもらってGDIで描画
593:デフォルトの名無しさん
08/05/04 06:52:32
>>591
Old New Thingの本によくまとまっている。
邦訳版は「Windowsプログラミングの極意」
10.4.2のあたり。
594:デフォルトの名無しさん
08/05/04 06:56:25
old new thingの本というならば、リンクぐらい貼ってやれよ。
今すぐ読めるんだから。
だいたいこのあたりか。
URLリンク(blogs.msdn.com)
URLリンク(blogs.msdn.com)
595:デフォルトの名無しさん
08/05/04 14:37:22
こんにちは。DelphiスレでAPIスレで聞いた方がいいとアドバイスがあったので、質問します。
とりあえずマウスのフックとキーボードが押されたときに反応する(フックっていうのか?)のはできるんだけど、
電卓の例の場合はどういう種類のフック使うんでしょうか?
電卓のプログラム(OSに搭載されている)の3のボタンを9っていう数字に変えたいんですけど(というより3を押すと9を押したときと同じ動作に)
596:デフォルトの名無しさん
08/05/04 14:51:06
キー入れ替えソフト使ったほうが早いような・・・レジストリいじるやつ
597:デフォルトの名無しさん
08/05/04 14:57:32
どうしてもやりたいんであれば
対象ウィンドウのウィンドウプロシージャを入れ替えるとか…
お行儀のいい方法ではないよ
598:デフォルトの名無しさん
08/05/04 15:27:44
ていうか3を9に変えたいなんて不可解な行為の理由が激しく気になる
テンキーを携帯電話の配列にしたいの?
599:デフォルトの名無しさん
08/05/04 15:31:53
>>597
なんかDelスレでSetWindowsExで可能になると聞いたんですが、これを使うとなるとどのようにフックすればよろしいのでしょうか?
入れ替えるというより、3を押されたことを確認したら9というメッセージを変わりに送るという事はできますでしょうか?
600:デフォルトの名無しさん
08/05/04 15:32:50
>>598
とくに意味はないんですが、好奇心です^^
601:デフォルトの名無しさん
08/05/04 15:50:34
>>599
WriteProcessMemory、CreateRemoteThreadを使って相手プロセスにDLLを入れる
GetWindowLongでターゲットウィンドウのウィンドウプロシージャの前に自前のウィンドウプロシージャを挿入
ウィンドウメッセージのキーコードを見張って書き換えてから元のウィンドウプロシージャに渡す
602:デフォルトの名無しさん
08/05/04 15:56:59
>>601
ありがとうございます。
DLL INjectionってやつですか?
流れ書いてくれたおかげで、できそうです。
どうもありがとうございました。
603:デフォルトの名無しさん
08/05/04 16:01:22
どうしてこうフックまがいの話ばかりに…
604:デフォルトの名無しさん
08/05/04 16:14:45
便利だからじゃない、フック。
フックでアプリをファックするわけだよ。ぷぷっ
605:デフォルトの名無しさん
08/05/04 16:25:03
ほとんどが悪用だからな
606:デフォルトの名無しさん
08/05/04 16:52:50
ここで質問するような奴は悪用できないだろう。常考
607:デフォルトの名無しさん
08/05/04 16:54:30
>>601
そんな面倒な方法を取らなくてもできるだろ
ホント、フック厨は短絡思考だな
608:デフォルトの名無しさん
08/05/04 17:15:23
>>607
だったら書いてやれよw 悪態ついてないでさ。
609:デフォルトの名無しさん
08/05/04 18:13:53
SetWindowsHookExをMSDNで調べれば>>601のような面倒な手段を取る必要が無いぐらい分かるだろう
回答者がその程度のスキルじゃ質問者が可哀想だ
610:デフォルトの名無しさん
08/05/04 18:19:08
どうだろ。
別にフックする事が目的でないんなら601のような回答でも問題はないような。
611:デフォルトの名無しさん
08/05/04 18:40:51
キーイベントを弄るだけにWriteProcessMemoryやCreateRemoteThreadを使うのはナンセンス
612:デフォルトの名無しさん
08/05/04 20:21:58
>>609
SetWindowsHookEx
を使うとしたら、
SetWindowsHookEx(? @HookProc, HInstance, 0);
第一引数はなに使うんだ?
613:デフォルトの名無しさん
08/05/04 21:04:29
>>612
WH_GETMESSAGEかな。
GETMESSAGEフックならWM_KEYDOWN拾えるし
メッセージやパラメータの書き換えも出来たはず。
多分ね。
614:デフォルトの名無しさん
08/05/04 21:38:12
現在マウスのボタンが押下されてるかどうかを知る方法ってありますか
キーでいうGetAsyncKeyStateのマウス版がほしいのですが・・・
615:デフォルトの名無しさん
08/05/04 21:42:46
>>613
595読むとマウスでボタンクリックされた場合も考慮する必要がありそうだからダメだと思う。
SetWindowsHookEx はプロセスへのDLL注入目的に使うのかと思ったら違ったのか。
>>612
自分なら SetWindowsHookEx でプロセスを注入、メッセージ投げてフックプロシージャ内から
SetWindowLongPtr でウィンドウプロシージャの差し替えってやりそう。
616:デフォルトの名無しさん
08/05/04 21:44:55
>>614
MSDN の GetAsyncKeyState の項目に
> GetAsyncKeyState 関数は、マウスボタンの状態も取得できます。
> ただしこの関数は、物理的なボタンのマップ先である論理的なマウスボタンの
> 状態ではなく、物理的なマウスボタンの状態を取得します。
って書いてあるけど、ダメなの?
617:デフォルトの名無しさん
08/05/04 21:47:17
>>615
orz
キーボードだけだと思ってた。ごめんね。
618:デフォルトの名無しさん
08/05/04 21:51:18
流れも読めない奴がレスすべきではない。
と煽ってみる。
619:デフォルトの名無しさん
08/05/04 21:51:18
どないしたらWindowsアプリ
620:デフォルトの名無しさん
08/05/04 21:51:43
>>619
気になるので最後まで書き込んでください。
621:デフォルトの名無しさん
08/05/04 21:52:55
>>615
ボタンの位置をMoveWindowで動かして変えればいいんじゃね?
てかいつの間にか電卓のボタンがButtonコントロールになってるんだな
Win98以降文字が小さくなって見づらいと思っていたらそれが原因か
622:デフォルトの名無しさん
08/05/04 21:56:36
>>621
感動した。なんてスマートな方法なんだ。
623:デフォルトの名無しさん
08/05/04 22:03:07
>>615
まず何をフックするかじゃね?
この場合は3を押された事をフックするから何使うかわからないが・・・。
624:デフォルトの名無しさん
08/05/04 22:11:53
自分で電卓作ればよくね?
いや、電卓のUIだけ作って見えない本物のcalc.exeに計算させるとか。
625:デフォルトの名無しさん
08/05/04 22:12:19
電卓の改造 〜結論〜
・calc.exeをリソースエディタで書き換える
原則的に、フックやDLL注入などで動的に書き換える必要があるのは
対象アプリが限定されていない場合、または対象アプリがCRCやMD5などで改竄チェックしている場合に留めるべき
・どうしてもフックで解決したいならSetWindowsHookEx(WH_GETMESSAGE)でWM_COMMANDを書き換える
キー(0〜9、+-*/など)を押された場合もアクセラレータテーブルに基づいて
TranslateAcceleratorがWM_COMMANDを発行するようになっている
626:デフォルトの名無しさん
08/05/04 22:23:08
>>619
何を書き込もうとしたのか気になって昼寝ができませんでした。
627:デフォルトの名無しさん
08/05/04 22:36:04
>>626
ヨーロッパ辺りに住んでる人ですか?
628:デフォルトの名無しさん
08/05/04 22:36:19
>>616
失礼シマスタ・・・
キーだけだとばかり・・・
629:デフォルトの名無しさん
08/05/04 22:47:51
619は書き込んでる途中で来客か何かあったんだろう。
鼻歌を歌ってて、おっと、ここは用心しなければ。な事態になったとかな。
630:デフォルトの名無しさん
08/05/04 22:55:25
猫とwisdomが久しぶりに更新。
改訂第3版とな?
631:デフォルトの名無しさん
08/05/04 22:58:02
誰があんなとこ見てんだよ
632:デフォルトの名無しさん
08/05/04 23:02:36
久米井もよくやるもんだw
633:デフォルトの名無しさん
08/05/04 23:10:50
Win32APIの解説サイトってあまり良質な所は無いよね
まあそれに気づくのはスキルがそこそこ付いてきた頃だけど
この辺、Javaや.NETとかの解説サイトはどうなんだろう・・・
634:デフォルトの名無しさん
08/05/04 23:17:55
良質な所って例えばどこ?
635:デフォルトの名無しさん
08/05/04 23:44:01
完全無欠なサイトなど存在しない
636:デフォルトの名無しさん
08/05/04 23:46:01
↑話を理解してない馬鹿
637:デフォルトの名無しさん
08/05/04 23:51:22
どんな(へぼ)サイトでも役に立つよ
638:デフォルトの名無しさん
08/05/05 00:53:40
これ読めよ
URLリンク(www.amazon.co.jp)
639:デフォルトの名無しさん
08/05/05 02:48:04
SetForegroundWindow() するとウィンドウが最前面に来るけど、フォーカスだけを
当てて、ウィンドウは動かさない方法ない?
640:デフォルトの名無しさん
08/05/05 03:05:05
SetWindowPosでできそうな気がしたけど、URLリンク(msdn.microsoft.com)
641:デフォルトの名無しさん
08/05/05 03:06:24
途中で書き込んでしまった..。
SetWindowPosでできそうな気がしたが、できないようですね..。
URLリンク(msdn.microsoft.com)
642:デフォルトの名無しさん
08/05/05 03:39:35
ワロタ。じゃあ書くなよw
643:デフォルトの名無しさん
08/05/05 11:26:12
>>639
何のためにWin98でSetForegroundWindowの仕様が変更されたのかよく考えてみよう
最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
4996日前に更新/131 KB
担当:undef