Я не силен в C++, больше в C# и PHP. Мне был назначен проект, который требует от меня использования GetTickCount
и подключения к приложению. Мне нужна помощь, так как по какой-то причине это не работает, как планировалось... Вот код для перехвата, я знаю, что он работает, потому что я использовал его в проектах раньше. Единственное, в чем я не уверен, так это в части GetTickCount
. Я попробовал GetTickCount64
, думая, что это решение моей проблемы (то, во что я его вводил, не вылетало), но обнаружил, что вместо этого оно просто не работает вообще, поэтому оно не вылетает.
bool APIENTRY DllMain(HINSTANCE hDll, DWORD dwReason, LPVOID lpReserved)
{
switch(dwReason)
{
case DLL_PROCESS_ATTACH:
DisableThreadLibraryCalls(hDll);
CreateThread(0,0, (LPTHREAD_START_ROUTINE)KeyHooks, 0, 0, 0);
GetTickCount_orig = (DWORD (__stdcall *)(void))DetourFunction((PBYTE)GetProcAddress(GetModuleHandle("kernel32.dll"), "GetTickCount"), (PBYTE)GetTickCount_hooked);
case DLL_PROCESS_DETACH:
DetourRemove((PBYTE)GetProcAddress(GetModuleHandle("kernel32.dll"), "GetTickCount"), (PBYTE)GetTickCount_hooked);
break;
}
return true;
}
Вот остальная часть кода, который используется для GetTickCount
DWORD oldtick=0;
DWORD (WINAPI *GetTickCount_orig)(void);
DWORD WINAPI GetTickCount_hooked(void)
{
if(oldtick==0)
{
oldtick=(*GetTickCount_orig)();
return oldtick;
}
DWORD factor;
DWORD ret;
ret = (*GetTickCount_orig)();
factor = 3.0;
DWORD newret;
newret = ret+((oldtick-ret)*(factor-1));
oldtick=ret;
return newret;
}
Видите ли вы что-то неправильное или что следует изменить? Любая помощь приветствуется. Спасибо!
break;
передcase DLL_PROCESS_DETACH
? Потому что как сейчас написано - вы сразу удаляете свой хук после инициализации - person valdo   schedule 01.02.2011