информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Страшный баг в WindowsВсе любят медSpanning Tree Protocol: недокументированное применение
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Бэкдор в xz/liblzma, предназначенный... 
 Три миллиона электронных замков... 
 Doom на газонокосилках 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
Новости с фронта... Если вставить MessageBeep в DLL, то... 23.11.06 18:50  Число просмотров: 1516
Автор: Vedrus <Serokhvostov Anton> Статус: Member
Отредактировано 23.11.06 19:40  Количество правок: 6
<"чистая" ссылка> <обсуждение закрыто>
Новости с фронта... Если вставить MessageBeep в DLL, то видно, что перехватчик работает и за пределами "своего" приложения. Есть подозрение, что PostMessage не доставляет сообщение окну hwndParent. Буду признателен за помощь.

/*****************spy.cpp
#include <windows.h>
#include "resource.h"
#include "msghook.h"
#pragma comment (lib, "msghook.lib")

BOOL CALLBACK Spy(HWND hDlg, UINT iMsg, WPARAM wParam, LPARAM lParam)
{
    switch (iMsg)
    {
    case WM_INITDIALOG:
        InstallHook(hDlg);
        return TRUE;
    case WM_SPY_LBUTTONDOWN:
    case WM_SPY_LBUTTONUP:
        MessageBeep(MB_ICONASTERISK);
        return TRUE;
    case WM_CLOSE:
        UninstallHook();
        EndDialog (hDlg, 0);
        return TRUE;
    } // switch (iMsg) ...
    return FALSE;
} // Spy


int WINAPI WinMain(HINSTANCE hInst, HINSTANCE, LPSTR, int)
{
    DialogBox (hInst, "Spy", NULL, Spy);

    return 1;
}
/*****************msghook.cpp
static HHOOK hhookGetMsg;	// Значение устанавливает главная программа
static HWND  hwndParent;	// Хэндл окна установившего перехватчик
static HINSTANCE hinstDLL;	// Хэндл этой DLL

BOOL WINAPI DllMain(HINSTANCE hDll, DWORD fdwReason, LPVOID lpvReserved)
{
    if (fdwReason == DLL_PROCESS_ATTACH)
        hinstDLL = hDll;

    return TRUE;
}

EXPORT void InstallHook(HWND hwnd)
{
    hwndParent = hwnd;
	
    hhookGetMsg = SetWindowsHookEx(
                      WH_GETMESSAGE,	// Перехват сообщений оконной процедуре
                      GetMsgProc,	// Перехватчик
                      hinstDLL,		// DLL перехватчика
                      0);		
}

EXPORT void UninstallHook()
{
    UnhookWindowsHookEx(hhookGetMsg);
}

EXPORT LRESULT CALLBACK GetMsgProc(int nCode, WPARAM wParam, LPARAM lParam)
{
    POINT	pt;		// Текущее положение указателя мыши
    HWND	hwndCtrl;	// Текущее окно
    MSG *msg = (MSG *) lParam;	// Перехваченное сообщение

    CallNextHookEx(hhookGetMsg, nCode, wParam, lParam);

    switch (msg->message)
    {
    case WM_LBUTTONDOWN:
        PostMessage(hwndParent, WM_SPY_LBUTTONDOWN, 0, (LPARAM) msg->hwnd);
        break;
    case WM_LBUTTONUP:
        PostMessage(hwndParent, WM_SPY_LBUTTONUP, 0, (LPARAM) msg->hwnd);
        break;
    }

    return NULL;
}

---
<programming>
[Win32] Проблема с Windows Hooks 23.11.06 15:57  
Автор: Vedrus <Serokhvostov Anton> Статус: Member
Отредактировано 23.11.06 18:53  Количество правок: 2
<"чистая" ссылка> <обсуждение закрыто>
Опять я к вам за помощью. Такая проблема. Пишу программу для перехвата данных из диалоговых элементов. Установил глобальный хук WH_GETMESSGAE (перехватчик находится в DLL). Ловлю сообщения связанные с нажатием мыши. Перехват срабатывает только в пределах созаднного мной окна, хтотя WM_KEYUP ловит исправно. Кто-нибудь знает, как поймать все сообщения от мыши? В принципе могу код выложить.

Может у кого ссылки на тему есть?
И ещё один вопрос. Не по теме. Может есть какие-нибудь теги... 23.11.06 18:58  
Автор: Vedrus <Serokhvostov Anton> Статус: Member
<"чистая" ссылка> <обсуждение закрыто>
И ещё один вопрос. Не по теме. Может есть какие-нибудь теги для оформления исходных кодов, а то прямым текстом никакой структуры не видно :(
<без заголовка> 23.11.06 19:07  
Автор: ZloyShaman <ZloyShaman> Статус: Elderman
Отредактировано 23.11.06 19:08  Количество правок: 1
<"чистая" ссылка> <обсуждение закрыто>
Спасибо 23.11.06 19:17  
Автор: Vedrus <Serokhvostov Anton> Статус: Member
Отредактировано 23.11.06 19:23  Количество правок: 1
<"чистая" ссылка> <обсуждение закрыто>
Новости с фронта... Если вставить MessageBeep в DLL, то... 23.11.06 18:50  
Автор: Vedrus <Serokhvostov Anton> Статус: Member
Отредактировано 23.11.06 19:40  Количество правок: 6
<"чистая" ссылка> <обсуждение закрыто>
Новости с фронта... Если вставить MessageBeep в DLL, то видно, что перехватчик работает и за пределами "своего" приложения. Есть подозрение, что PostMessage не доставляет сообщение окну hwndParent. Буду признателен за помощь.

/*****************spy.cpp
#include <windows.h>
#include "resource.h"
#include "msghook.h"
#pragma comment (lib, "msghook.lib")

BOOL CALLBACK Spy(HWND hDlg, UINT iMsg, WPARAM wParam, LPARAM lParam)
{
    switch (iMsg)
    {
    case WM_INITDIALOG:
        InstallHook(hDlg);
        return TRUE;
    case WM_SPY_LBUTTONDOWN:
    case WM_SPY_LBUTTONUP:
        MessageBeep(MB_ICONASTERISK);
        return TRUE;
    case WM_CLOSE:
        UninstallHook();
        EndDialog (hDlg, 0);
        return TRUE;
    } // switch (iMsg) ...
    return FALSE;
} // Spy


int WINAPI WinMain(HINSTANCE hInst, HINSTANCE, LPSTR, int)
{
    DialogBox (hInst, "Spy", NULL, Spy);

    return 1;
}
/*****************msghook.cpp
static HHOOK hhookGetMsg;	// Значение устанавливает главная программа
static HWND  hwndParent;	// Хэндл окна установившего перехватчик
static HINSTANCE hinstDLL;	// Хэндл этой DLL

BOOL WINAPI DllMain(HINSTANCE hDll, DWORD fdwReason, LPVOID lpvReserved)
{
    if (fdwReason == DLL_PROCESS_ATTACH)
        hinstDLL = hDll;

    return TRUE;
}

EXPORT void InstallHook(HWND hwnd)
{
    hwndParent = hwnd;
	
    hhookGetMsg = SetWindowsHookEx(
                      WH_GETMESSAGE,	// Перехват сообщений оконной процедуре
                      GetMsgProc,	// Перехватчик
                      hinstDLL,		// DLL перехватчика
                      0);		
}

EXPORT void UninstallHook()
{
    UnhookWindowsHookEx(hhookGetMsg);
}

EXPORT LRESULT CALLBACK GetMsgProc(int nCode, WPARAM wParam, LPARAM lParam)
{
    POINT	pt;		// Текущее положение указателя мыши
    HWND	hwndCtrl;	// Текущее окно
    MSG *msg = (MSG *) lParam;	// Перехваченное сообщение

    CallNextHookEx(hhookGetMsg, nCode, wParam, lParam);

    switch (msg->message)
    {
    case WM_LBUTTONDOWN:
        PostMessage(hwndParent, WM_SPY_LBUTTONDOWN, 0, (LPARAM) msg->hwnd);
        break;
    case WM_LBUTTONUP:
        PostMessage(hwndParent, WM_SPY_LBUTTONUP, 0, (LPARAM) msg->hwnd);
        break;
    }

    return NULL;
}

---
Не совсем правильно 23.11.06 19:05  
Автор: Neznaika <Alex> Статус: Member
<"чистая" ссылка> <обсуждение закрыто>
1) У тебя есть глобальные переменные, типа -
static HWND hwndParent;

Когда твоя Dll мапится в адресное пространство другого процесса,
то все глобальные переменные будут равны 0. Поэтому
PostMessage( hwndParent, ..

превращается в
PostMessage( 0, ..

2) Все глобальные переменные (которые static) -
надо хранить в shared section.
Ты про это? Тоже не хочет... 23.11.06 19:14  
Автор: Vedrus <Serokhvostov Anton> Статус: Member
Отредактировано 23.11.06 20:03  Количество правок: 3
<"чистая" ссылка> <обсуждение закрыто>
Ты про это? Тоже не хочет...

#pragma data_seg("Shared")

HHOOK hhookGetMsg; // Значение устанавливает главная программа
HWND hwndParent; // Хэндл окна установившего перехватчик
HINSTANCE hinstDLL; // Хэндл этой DLL

#pragma data_seg()
#pragma comment(linker, "/section:Shared,rws")

Хм... А секции .bss в DLL нету. В чём касяк? Компилю MS Visual C++ 6.0
Перед тем, как сделать PostMessage 23.11.06 20:05  
Автор: Neznaika <Alex> Статус: Member
<"чистая" ссылка> <обсуждение закрыто>
пиши куда-нибудь в лог hhookGetMsg, hwndParent и hinstDLL.

Сразу будет видно, когда они равны нулю.
Логи вести не стал. И так стало ясно, что hwndParent... 24.11.06 03:57  
Автор: Vedrus <Serokhvostov Anton> Статус: Member
<"чистая" ссылка> <обсуждение закрыто>
Логи вести не стал. И так стало ясно, что hwndParent обнуляется везде кроме "родного" приложения.
Всем спасибо. Решение нашлось:

#pragma bss_seg("shared")

HHOOK hhookGetMsg; // Значение устанавливает главная программа
HWND hwndParent; // Хэндл окна установившего перехватчик
HINSTANCE hinstDLL; // Хэндл этой DLL

#pragma comment(linker, "/section:shared,rws")
В пределах твоего окна -- или в пределах твоего приложения? 23.11.06 18:49  
Автор: Neznaika <Alex> Статус: Member
<"чистая" ссылка> <обсуждение закрыто>
У меня приложение из одного окна. Или я не про то? 23.11.06 18:51  
Автор: Vedrus <Serokhvostov Anton> Статус: Member
<"чистая" ссылка> <обсуждение закрыто>
1




Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2024 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach