掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
システムフックの共有メモリについて (ID:71173)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
質問させて頂きます。 現在、マウスフック用DLLを作成しております DLL_PROCESS_ATTACHで、共有メモリを作成し 以降、フックプロシージャでは、作成した共有メモリの内部を元に処理を行っておりますが 現在、その処理がうまく行っておりません 例えば typedef struct _tag_HOGEHOGE { HHOOK hHook; BOOL bFlg; } HOGEHOGE のように、定義した構造体サイズの共有メモリを作成し 以降そのメモリは、OpenFileMapping->(HOGHOGE *)MapViewOfFileとしてアクセスします フックプロシージャ内では、bFlgを基に処理をしており bFlgがTRUEなら処理をするようにしています。 TRUEにする方法は、DLL内部関数を通す事で操作出来るようにしています(仮にsetDLLFlg関数で操作とします) つまり、フックプロシージャ内で処理を行うときは、アプリ側で setDLLFlg( TRUE ); のように、一度共有メモリのbFlgをTRUEにする必要があります アプリ側では、必要な時にTRUEにして、必要の無いときはFALSEにして害を与えないようにしていますが 不思議な事に、TRUEとされていないのに、フックプロシージャ内部処理が動くときがあります アプリ側にデバッガを通し、TRUEにするタイミングでブレークを貼ってみましたが やはりアプリ側でTRUEにしていないのに、フックプロシージャ内部の処理が動きます 調べてみると、bFlgがいつの間にかTRUEになっております このように、アプリ側が操作をしていないのに共有メモリの値が変わる場合、どのようなケースが考えられるでしょうか? DLLのアタッチとデタッチの時の処理は以下の用にしています case DLL_PROCESS_ATTACH: /* 共有メモリを作成 */ g_hMapHandle = CreateFileMapping( (HANDLE)0xFFFFFFFF, NULL, PAGE_READWRITE, 0, sizeof(HOGEHOGE), TEXT("MAP_HOGEHOGE") ); break; case DLL_PROCESS_DETACH: if( g_hMapHandle != NULL ) { /* 共有メモリハンドルを破棄 */ CloseHandle( g_hMapHandle ); } どうぞご教授の程、よろしくお願いします。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.