Почему я немогу запустить глобальный хук с длл которая подгружается к winlogon. Если загрузить длл в другой процесс (GUI), например в explorer то все ок, т.е хук работает и длл проекцир. в другие процессы, а с winlogon, svchost и другими сист. процесами не хочет. Код (Text): procedure DLLEntryPoint(dwReason: DWord); begin case dwReason of DLL_PROCESS_ATTACH: begin SetHook; //Процедура установки хука ....
Код (Text): Function MessageProc(code : integer; wParam : word;lParam : longint) : longint; stdcall; begin CallNextHookEx(hook, Code, wParam, lparam); Result:=0; end; Procedure SetGlobalHook(); begin hook:=SetWindowsHookEx(WH_GETMESSAGE, @MessageProc, HInstance,0); Sleep(INFINITE); end; Procedure SetHook(); var hMutex: dword; TrId: dword; begin hMutex := CreateMutex(nil, false, 'my_hook'); if GetLastError = 0 then CreateThread(nil, 0, @SetGlobalHook, nil,0, TrId) else CloseHandle(hMutex); end;
1. После установки хука длл проецируется на НОВЫЕ процессы твоего десктопа, СОЗДАННЫЕ УЖЕ ПОСЛЕ УСТАНОВКИ ХУКА. Winlogon и другие системные процессы, а так же все процессы, созданые ранее твоим хуком не заденутся. Хочешь хукать сис-процессы - проецируй либу вручную. 2. Вруби отладочные привилегии, чтобы получить доступ к системным процессам. Код (Text): HANDLE hToken; TOKEN_PRIVILEGES tp; _LUID luid; ULONG x; // ENABLE DEBUG PRIVILEGE OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken); LookupPrivilegeValueA(0,"SeDebugPrivilege",&luid); tp.PrivilegeCount= 1; tp.Privileges[0].Luid = luid; tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; AdjustTokenPrivileges(hToken,0,&tp,sizeof(tp),0,&x);
не согласен. будут похуканы все процессы, у которых есть цикл GetMessage DispatchMessage. Даже ранее созданные
zoool Меня не верно поняли. Хук запускается с Длл. Т.е winlogon подгружает мою длл, а длл должна запустить хук, и сама себя проец. в другие процессы (это в теории), но на практике с winlogon и другими сист. процессами это не пашет. А с explorer, например, все ок. Как только длл подгружается к нему, срабативает глобал хук и длл проекц. вл все GUI процессы.
Юзай прямой инжект, в ХР со включёнными отлабочными привилегиями всё пашет... VirtualAllocEx+CreateRemoteThread