続 ウィルスバスター2008
action_game.exeがウィルスバスター2008からDLLインジェクションで怒られる問題で、さすがに警告がうざくなってきたので調査しました。
再現する最小コードを調べたところ、dinput.dllをロードするだけで再現しました。
#define DIRECTINPUT_VERSION 0x0500 #pragma comment(lib, "dinput.lib") #include <windows.h> #include <dinput.h> int main() { // 何かアドレスを使っておかないと、DLLがリンクされないので if (&DirectInputCreateA) return 0; else return 1; }
ウィルスバスター2008が指摘しているのは、NtSetWindowsHookEx()の呼び出しです。
おそらくこれはDirectInputが排他モードを実装するのに使用していると思われます。
試しにdi_key_buttonを「DLLインジェクション」の監視をオン/オフの状態で動かしてみたところ、オンの状態ではキーボードの入力を受け取ることができませんでした。
というわけでNtSetWindowsHookEx()の呼び出しは正当なものだと思われるので、dinput.dllを例外登録しようと思ったんですが、.exeか.comしか登録できないみたいで断念。
監視自体をオフにしました。
DirectInput利用アプリは全部引っかかると思うんですけど、商用アプリだと事前に例外登録されてるっぽいです。
そもそもこの手のフックはDLLからしかできないはずなんで、DLL単位で指定できないと意味がない気もするんですが、、、。