Перечисление хендлов процесса из usermode

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

  1. SpiritFire

    SpiritFire New Member

    Публикаций:
    0
    Регистрация:
    21 янв 2008
    Сообщения:
    31
    Объясните пожалуйста, кому не лень, или пошлите к соответствующему RTFM-у, кто знает -- прав ли я в том, что из режима пользователя в OS Windows перечисление всех открытых процессом хендлов невозможно, потому, что их таблица хранится в адресном пространстве, недоступном из usermode, а нативных API для его получения ( Nt*(...) ) нет.

    А также, как это все объяснить культурно преподавателю завтра утром... Задание у меня такое...

    Что-то мне кажется, что это бред (или импровизация), но как это культурно доказать - хз...

    P.S. Опыта тут не особо много, может, я ошибаюсь?
     
  2. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    можно.

    ZwQuerySystemInformation (SystemHandleInformation
     
  3. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    SystemExtendedHandleInformation.
     
  4. K10

    K10 New Member

    Публикаций:
    0
    Регистрация:
    3 окт 2008
    Сообщения:
    1.590
    можно, пример - отключение WFP
     
  5. khv_test

    khv_test New Member

    Публикаций:
    0
    Регистрация:
    30 июн 2004
    Сообщения:
    135
    пример отключения защиты виндоус на файлики
     
  6. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    khv_test
    Код (Text):
    1. HINSTANCE GetModuleInstance(char *pszDllName)
    2. {
    3.     HINSTANCE hLib;
    4.     hLib = GetModuleHandle(pszDllName);
    5.     if(hLib == NULL)
    6.         hLib = LoadLibrary(pszDllName);
    7.     return(hLib);
    8. }
    9.  
    10.     hInstNTDLL = GetModuleInstance("ntdll.dll");
    11.     pZwQueryObject = (ZWQUERYOBJECT)GetProcAddress(hInstNTDLL,"ZwQueryObject");
    При создании процесса ядро проецирует в него нтдлл. Загружать её есчо раз смысла нет. Никогда не понимал тех, кто использует статическй импорт из другого модуля чтобы динамически определить импорт из нтдлл :)
    Или оно как не компилицо.. меняйте хидеры .)
     
  7. khv_test

    khv_test New Member

    Публикаций:
    0
    Регистрация:
    30 июн 2004
    Сообщения:
    135
    Clerk
    Я вкурсе про все дела, кто что проецирует. Эта функция не только для загрузки NTDLL использовалась поэтому так.
     
  8. Twister

    Twister New Member

    Публикаций:
    0
    Регистрация:
    12 окт 2005
    Сообщения:
    720
    Адрес:
    Алматы
    Что-что, а регистры ни как не могут относиться к контексту процесса. Только к потоку. Так что преподу "низачот".

    По работе с хэндлами могу порекомендовать отличную мою статейку для начинающих, правда писана она совсем не для этого сайта :)