0

Windows 7 Professional x64 を使用しています。

DefWindowProcW プロシージャをフックする必要があります。しかし、 経由でアドレスを取得しようとすると、ntdll.dll にあるのGetProcAddress()アドレスが返されます。の先頭にNtdllDefWindowProcW()実際のuser32関数へのジャンプがあります。DefWindowProcW()NtdllDefWindowProcW()

ntdll プロシージャの代わりに実際のプロシージャ アドレスを取得する方法はありますか?

4

1 に答える 1

2

これは、転送エクスポートと呼ばれるものです。この関数は、以前のバージョンの Windows では user32 に実装されていました。しかし、ある時点で、Microsoft はそれを ntdll に移動することを決定しました。アプリケーションの破損を避けるために、user32 エクスポートは ntdll で指定された関数に転送さ"NtdllDefWindowProc_W"れます。

ntdll の転送アドレスは、関数が実際に実装されている場所です。その後、user32 を呼び出す可能性があることは、実装の詳細です。したがって、 をフックしたい場合はDefWindowProcW、呼び出しによって返されたアドレスを完全にフックすることができます

GetProcAddress(GetModuleHandle("user32.dll"), "DefWindowProcW")
于 2015-06-16T15:18:57.573 に答える