2

私のコンパイラ: Microsoft Visual Studio 2012.
私のコードは detours 2.1 で機能しますが、私のコンパイラではもうコンパイルできません (モジュールは SAFESEH イメージに対して安全ではありません)。MVS2005 のような古いコンパイラを使用する必要がありますが、使用したくありません。

そのため、コードを更新して detours 3.0 を使用する必要があります。

いくつかのものを編集し、4 つのエラーが発生しました。

error C3861: 'DetourFunction': identifier not found
error C3861: 'DetourFunction': identifier not found
error C3861: 'DetourRemove': identifier not found
error C3861: 'DetourRemove': identifier not found

これはコードブロックです:

ここで DetourFunction エラー

o_NtQuerySystemInformation = (t_NtQuerySystemInformation)DetourFunction((PBYTE)GetProcAddress(GetModuleHandle("ntdll.dll"), "NtQuerySystemInformation"), (PBYTE)My_NtQuerySystemInformation);
o_ZwOpenProcess = (t_ZwOpenProcess)DetourFunction((PBYTE)GetProcAddress(GetModuleHandle("ntdll.dll"), "ZwOpenProcess"), (PBYTE)My_ZwOpenProcess);

迂回ここでエラーを削除

    DetourRemove((PBYTE)o_NtQuerySystemInformation, (PBYTE)My_NtQuerySystemInformation);
    DetourRemove((PBYTE)o_ZwOpenProcess, (PBYTE)My_ZwOpenProcess);

アップデート

そのため、DetourAttach と DetourDetach に変更しようとしましたが、PBYTE から PVOID へのエラーが発生します。

4

1 に答える 1

3

DetourFunctionとはとDetourRemoveに置き換えられました。それらを使用することはそれほど難しくありません。ライブラリには、これらの API の使用方法を確認できる一連のサンプルが付属しています。コードは次のようになります。DetourAttachDetourDetach

BOOL APIENTRY DllMain( HANDLE hModule, 
                      DWORD  ul_reason_for_call, 
                      LPVOID lpReserved
                      )
{
   if (ul_reason_for_call == DLL_PROCESS_ATTACH)
   {
      o_NtQuerySystemInformation = (t_NtQuerySystemInformation)DetourAttach(&(PVOID&)GetProcAddress(GetModuleHandle("ntdll.dll"), "NtQuerySystemInformation"), My_NtQuerySystemInformation);
      o_ZwOpenProcess = (t_ZwOpenProcess)DetourAttach(&(PVOID&)GetProcAddress(GetModuleHandle("ntdll.dll"), "ZwOpenProcess"), My_ZwOpenProcess);

      MyModuleHandle = (HMODULE)hModule;
      MyPid = GetCurrentProcessId();
   }
   if (ul_reason_for_call == DLL_PROCESS_DETACH)
   {
      DetourDetach(&(PVOID&)o_NtQuerySystemInformation, My_NtQuerySystemInformation);
      DetourDetach(&(PVOID&)o_ZwOpenProcess, My_ZwOpenProcess);
   }

   return TRUE;
}
于 2013-04-16T09:04:48.947 に答える