SmK Гость
|
Добавлено: Пн Авг 30 2004 10:49 Заголовок сообщения: Внедрение DLL |
|
|
Кто сталкивался с внедрением длл в чужое адресное пространство ?
Вроде бы несложно, но я чего то торможу... не работает прога и всё тут...
Так вызываю функцию (SetHook) из длл
Код: |
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
HINSTANCE hmodCaller = LoadLibrary("testhookdll.dll");
PROC pfnF = GetProcAddress(hmodCaller,"SetHook");
if (pfnF==NULL) {
MessageBox(0,"Set Hook not found","Error",0);
}else{
(*(pfnF))();
}
}
|
Сама функция
Код: |
extern "C" __declspec(dllexport) VOID SetHook()
{
BOOL fOk = FALSE;
HWND hwndProgMan = FindWindow("ProgMan",NULL);
hwndProgMan = GetWindow(GetWindow(hwndProgMan,5),5);
char chr[32];
GetClassName(hwndProgMan,chr,32);
if (hwndProgMan == NULL) {
MessageBox(0,"Can't find classname 'ProgMan' ","Error",0);
return;
}
DWORD dwThreadId = GetWindowThreadProcessId(hwndProgMan, NULL);
if (dwThreadId != 0) {
g_ThreadId = GetCurrentThreadId();
g_hook = SetWindowsHookEx(WH_GETMESSAGE, GetMsgProc, g_hinstDll,
dwThreadId);
if (g_hook != NULL) {
fOk = PostThreadMessage(dwThreadId, WM_NULL, 0, 0);
} else {
fOk = UnhookWindowsHookEx(g_hook);
g_hook = NULL;
}
}
|
И ф-я GetMsgProc
Код: |
LRESULT WINAPI GetMsgProc(int nCode, WPARAM wParam, LPARAM lParam)
{
HWND hwndProgMan = FindWindow("ProgMan",NULL);
hwndProgMan = GetWindow(GetWindow(hwndProgMan,5),5);
LPPOINT ppt;
bool bOk = SendMessage(hwndProgMan,LVM_GETITEMPOSITION,2,(long)ppt);
return(CallNextHookEx(g_hook, nCode, wParam, lParam));
}
|
Вот и всё, программа должна получать координаты 2-го ярлыка на раб. столе, но вместо этого сносит Explorer... (WinXP) |
|