SetWindowsHookEx и Windows Vista

Тема в разделе "WASM.WIN32", создана пользователем MaximusPrime, 27 мар 2008.

  1. MaximusPrime

    MaximusPrime New Member

    Публикаций:
    0
    Регистрация:
    27 мар 2008
    Сообщения:
    3
    Добое время суток:)

    Занемаюсь портирование одной программ на Windows Vista сталкнулся с проблемой я выполняю SetWindowsHookEx на события WH_CBT использую DLL для загрузки во все процессы, но хук не выполняеться.

    Может кто то сталкивался и как с этим бороться в Vist-e?

    Приложение выполняеться в контексте пользователя не сервиса, так как в Vist-е сервисы находяться в изолированой среде. Так же к выполняемаму приложению подключен манифест об использовании привелегий администратора.
     
  2. Twister

    Twister New Member

    Публикаций:
    0
    Регистрация:
    12 окт 2005
    Сообщения:
    720
    Адрес:
    Алматы
    А ты посмотрел, загрузилась ли ДЛЛ в процессы? Что возвращает SetWindowsHookEx? Кде код, в конце концов?

    Я что-то упустил, видать. Откуда такое в манифесте?
     
  3. zoool

    zoool New Member

    Публикаций:
    0
    Регистрация:
    1 дек 2007
    Сообщения:
    412
    Что возвращает SetWindowsHookEx? GetLastError?
     
  4. MaximusPrime

    MaximusPrime New Member

    Публикаций:
    0
    Регистрация:
    27 мар 2008
    Сообщения:
    3
    GetLastError() - возвращает что все нормально. SetWindowsHookEx вернуло все как пологаеться, то что ей надо вернуть.

    DLL загрузилась в процес который устанавливает SetWindowsHookEx... но в остальные процессы она на загружаеться вот основная проблема...

    Вот код загрущика. Я сдела тестовое приложение на котором тестил все это
    Код (Text):
    1.   HINSTANCE hDll  = NULL;
    2.   HHOOK     hHook = NULL;
    3.     GetCurrentDirectory(MAX_PATH,ecDllName);
    4.     hDll = LoadLibrary(TEXT("C:\\Interceptor_test.dll"));
    5.     if(hDll != NULL){
    6.     HOOKPROC HookFunction = (HOOKPROC)GetProcAddress(hDll,"HookFunction");
    7.         if(HookFunction != NULL){
    8.            hHook = SetWindowsHookEx( WH_CBT, HookFunction, hDll, 0 );          
    9.                           LPVOID lpMsgBuf;
    10.                                  FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
    11.                                                       NULL,GetLastError(),
    12.                                                       MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),(LPTSTR) &lpMsgBuf,
    13.                                                       0,  NULL );
    14.                                  MessageBox( NULL, (LPCWSTR)lpMsgBuf, TEXT("GetLastError"), MB_OK|MB_ICONINFORMATION );
    15.                                 }
    16.                   }
    В dll функция перехватчика:
    Код (Text):
    1. DLLExport LRESULT CALLBACK HookFunction(int nCode, WPARAM wParam, LPARAM lParam)
    2. {
    3.     _TRACE("Hook work");
    4.    return CallNextHookEx(0,nCode ,wParam,lParam);
    5. }
    Вот манифест который я использую что выполнить поднятие прав для запуска программы:

    Код (Text):
    1. <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    2. <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
    3.     <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
    4.         <security>
    5.             <requestedPrivileges>
    6.                 <requestedExecutionLevel level="requireAdministrator" uiAccess="false"/>
    7.             </requestedPrivileges>
    8.         </security>
    9.     </trustInfo>
    10. </assembly>
    Есть какието соображения на этот счет?
     
  5. LazzY

    LazzY New Member

    Публикаций:
    0
    Регистрация:
    6 мар 2006
    Сообщения:
    123
    поиск по requireAdministrator ;) под вистой актуально, раньше не юзал
    2MaximusPrime >>
    а на счет хуков, обратите внимание на integrityLevel процессов, ставя хуки из приложения с Medium, они не расставятся в приложениях с высшим уровнем. ну и вопще про уак почитайте
     
  6. MaximusPrime

    MaximusPrime New Member

    Публикаций:
    0
    Регистрация:
    27 мар 2008
    Сообщения:
    3
    Спасибо порую в этом на правлении... хотя для теситрования я запускаю Internet Expoer который вобще имеет самый ниский уровень привелегий... и DLL не цепляеться даже к ниму... Виста-бливис... уже в печенке сидит...