Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware
Архив форумов ЦИТФорума
Море(!) вопросов - Море(!) ответов
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 
Как правильно задавать вопросы

Внедрение DLL

 
Перейти:  
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование
Предыдущая тема :: Следующая тема  
Автор Сообщение
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)
Вернуться к началу
Satai
Гость





СообщениеДобавлено: Сб Сен 04 2004 23:56    Заголовок сообщения: Ответить с цитатой

А типизацию кто соблюдать будет при назначении HANDLE на DLL
Вернуться к началу
Гость






СообщениеДобавлено: Вт Сен 07 2004 16:21    Заголовок сообщения: Ответить с цитатой

В смысле ? можно поподробней в каком участке программы, что за типизация ...
Вернуться к началу
Гость






СообщениеДобавлено: Пн Сен 13 2004 08:04    Заголовок сообщения: Ответить с цитатой

Anonymous писал(а):
В смысле ? можно поподробней в каком участке программы, что за типизация ...

typedef <тип возвращаемого результата> Typ_pfnF(<тип передаваемого парамета>,<...>)
Typ_pfnF pfnF;
pfnF=(Typ_pfnF)GetProcAddress(hmodCaller,"SetHook");
вроде так...
Вернуться к началу
Показать сообщения:   
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование Часовой пояс: GMT + 3
Страница 1 из 1

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


Powered by phpBB © 2001, 2002 phpBB Group
Русская поддержка phpBB

 

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 495 6608306, ICQ 232284597
Пресс-релизы — pr@citforum.ru
Послать комментарий
Информация для авторов
This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2006 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...