Привет..Перехватываю GetMessageW под вистой с помощью detours библиотеки. Свою хукдлл внедряю с помощью глобального хука WH_GETMESSAGE. код прдельно прост..Тестирую на блокноте Код (Text): BOOL (WINAPI *pGetMessageW)( LPMSG lpMsg,HWND hWnd,UINT wMsgFilterMin,UINT wMsgFilterMax)=GetMessageW; BOOL APIENTRY DllMain( HINSTANCE hinst, DWORD dwReason, LPVOID reserved/*HANDLE hModule,DWORD ul_reason_for_call, LPVOID lpReserved*/) { if (dwReason == DLL_PROCESS_ATTACH) { DisableThreadLibraryCalls(hinst); DetourTransactionBegin(); DetourUpdateThread(GetCurrentThread()); DetourAttach(&(PVOID&)pGetMessageW,pUnrealGetMessageW); DetourTransactionCommit(); } else if (dwReason == DLL_PROCESS_DETACH) { DetourTransactionBegin(); DetourUpdateThread(GetCurrentThread()); DetourDetach(&(PVOID&)pGetMessageW,pUnrealGetMessageW); DetourTransactionCommit(); } return TRUE; } BOOL WINAPI pUnrealGetMessageW( LPMSG lpMsg,HWND hWnd,UINT wMsgFilterMin,UINT wMsgFilterMax) { return pGetMessageW( lpMsg, hWnd, wMsgFilterMin, wMsgFilterMax); } Все работает..Однако если закрыть мое приложение,которое ставит хук,то происходит выгрузка lkk из блокнота, и после выгрузки приложение падает по адресу выполнения return pGetMessageW( lpMsg, hWnd, wMsgFilterMin, wMsgFilterMax); Если закрыть прото бокнот,без закрытия моего приложения,т.е. когда хук жив-все завершается нормально. По ХР все работает.Происходит только при перехвате GetMessageW,другие функции -нормально все отрабатывает при разных ситуациях. адрес pGetMessageW в фунции DetourDetach(&(PVOID&)pGetMessageW,pUnrealGetMessageW); восстанавливается нормальный.Потоки суспендятся. Немогу понять-откуда берется обращение по старому адресу. Вроде все расписал-может сталкивался кто? Могу кинуть исходники длл,если надо кому.... Я ничего не понимаю.
Я что-то не доганяю.... Ты при выгрузке ДЛЛ хуки ф-й снимаешь или нет? Если нет, то само собой падения будут!