2013-04-15 64 views
2

我的編譯器:Microsoft Visual Studio 2012.
我的代碼在detours 2.1上運行,但我無法用編譯器編譯它(模塊對SAFESEH圖像不安全)。我需要使用像MVS2005這樣的較舊的編譯器,但我寧願不要。C++ Detours 3.0在MVS 2012上出現錯誤「找不到標識符」

所以我需要更新我的代碼,並使用彎路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錯誤這裏

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

UPDATE

因此,我試圖將其更改爲DetourAttach和DetourDetach,但我得到一個PBYTE PVOID錯誤。

+0

你從哪裏得到那個錯誤?顯示代碼。 –

+0

這是完整的代碼:http://pastebin.com/XtfSHxBL – madziikoy

+0

嘿任何人打這個頁面我可能有相同的pbyte/pvoid錯誤,可能看這裏:[link] https://stackoverflow.com/questions/21591698/vs2012-windows-8-1/21591901/21591901#21591901 – wibble

回答

3

DetourFunctionDetourRemove已被替換爲DetourAttachDetourDetach。使用它們並不難,而且該庫附帶一組樣本,您可以在其中看到如何使用這些API。你的代碼應該是這樣的:

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; 
} 
+1

我知道這個線程是一個墳場,但彎路正在嚴重影響我的頭部。什麼是o_NtQuerySystemInformation參考?在ntdll.dll中指向t_NtQuerySystemInformation的指針?這將如何定義? – user2038443

相關問題