掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
DLL内deno (ID:60697)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
DD.でございます。度々申し訳ありませんが、少し質問させて頂きたいと思います。 DLL内で扱う共有メモリを使用する変数の判断と、その使用の仕方についてご質問させて頂きたいと思います。 現在、システムフックを行うDLLを作成しております。 正確には他プロセスにシステムフックを仕掛け、サブクラス化し、一部制御を乗っ取ってしまうものです。 その上で共有メモリを使用している変数は ○フックハンドル(HHOOK) ○サブクラス化するプロセスのハンドル(HWND) ○サブクラス化したプロセスに対して元のウィンドウプロシージャを確保するためのアドレス(WNDPROC) です。 処理の流れとしては、 FindWindowEx()とGetWindowThreadProcessId()で取得したものを、あらかじめ DllMain の第一引数でグローバル変数に取得しておいた(共有メモリではない) インスタンスハンドルと共に SetWindowsHookEx() に渡します。 サブクラス化するプロセスのハンドルは、フックプロシージャの LPARAM から取得したものを格納しています。→((MSG*)lParam->hwnd) 尚、こちらの処理の参考にさせて頂いたのは http://techtips.belution.com/ja/vc/0026/ に、なります。 <余談> DLL・フックに関する知識は「猫でもわかる〜」やその他、ネットで得たものです。 残念ながら、DLLやフックを使い、他プロセスを扱うための詳しい詳細やサンプルがのったページを探すことができませんでしたorz よいページがあれば教えて頂ければ幸いです<(_ _)> </余談> ここで、SetWindowLong()を使い、元のプロシージャへのアドレスを確保しつつ、自作したウィンドウプロシージャへ制御を移し変えます。 その後、フック解除の依頼がきたら SetWindowLong()にて元プロシージャに戻してやります。 その際に GetLastError()にて「アクセス拒否されました」とエラーになってします。 SetWindowLong()に渡すハンドルは !=NULL のチェックを入れてあるので問題ないと思います。(ハンドルエラーの場合には「無効なハンドル」というエラーになるかと思いますが一応) ならば共有にしてあるウィンドウプロシージャへのアクセスが拒否されてしまったのだろうか?と思い、
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.