Вопрос по ZwQuerySystemInformation и SYSTEM_HANDLE_INFORMATION

Тема в разделе "WASM.WIN32", создана пользователем kratorman, 25 сен 2009.

  1. kratorman

    kratorman New Member

    Публикаций:
    0
    Регистрация:
    14 ноя 2007
    Сообщения:
    8
    Получил список хэндлов фунцией ZwQuerySystemInformation.

    Хэндл описывается структурой:
    Код (Text):
    1. typedef struct _SYSTEM_HANDLE {
    2.     DWORD ProcessID;
    3.     WORD  HandleType;
    4.     WORD  HandleNumber;
    5.     DWORD KernelAddress;
    6.     DWORD Flags;
    7. } SYSTEM_HANDLE, * PSYSTEM_HANDLE;
    Но структура не документирована и хотелось бы в ней разобраться.
    1. Какие значения принимает HandleType для каких типов хэндлов.
    2. Как вообще вы добываете такую недокументированную информацию. Я честно капал поиск, но ничего...
     
  2. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    kratorman
    Если я правильно помню, HandleType различается на разных системах (если не сервис паках) для одного и того же типа. Поэтому для проверки номера типа в рантайме создаётся объект и проверяется его HandleType.
     
  3. cpplamo

    cpplamo New Member

    Публикаций:
    0
    Регистрация:
    11 авг 2009
    Сообщения:
    38
    Индекс типа объекта, для Process свой, для Thread свой и т.п.
    Символы, Ньюбет, WDK/MSDN
     
  4. cpplamo

    cpplamo New Member

    Публикаций:
    0
    Регистрация:
    11 авг 2009
    Сообщения:
    38
    Куда проще составить их таблицу в рантайме из директории объектов и получив все индексы оттуда сопоставлять.
     
  5. Velheart

    Velheart New Member

    Публикаций:
    0
    Регистрация:
    2 июн 2008
    Сообщения:
    526
  6. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    cpplamo
    Эм... а я что сказал?
     
  7. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    cpplamo
    Извиняюсь. :) Как-то пропустил ключевую фразу "из директории объектов".
     
  8. Clerk

    Clerk Забанен

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

    Sol_Ksacap Миша

    Публикаций:
    0
    Регистрация:
    6 мар 2008
    Сообщения:
    623
    Может быть полезным: Sysinternals HOWTO: Enumerate handles.

    И это:
    Код (Text):
    1. vista sp1 x32:
    2.  
    3. 0:000> dt SYSTEM_HANDLE_INFORMATION
    4. ntkrpamp!SYSTEM_HANDLE_INFORMATION
    5.    +0x000 NumberOfHandles  : Uint4B
    6.    +0x004 Handles          : [1] _SYSTEM_HANDLE_TABLE_ENTRY_INFO
    7.  
    8. 0:000> dt SYSTEM_HANDLE_TABLE_ENTRY_INFO
    9. ntkrpamp!SYSTEM_HANDLE_TABLE_ENTRY_INFO
    10.    +0x000 UniqueProcessId  : Uint2B
    11.    +0x002 CreatorBackTraceIndex : Uint2B
    12.    +0x004 ObjectTypeIndex  : UChar
    13.    +0x005 HandleAttributes : UChar
    14.    +0x006 HandleValue      : Uint2B
    15.    +0x008 Object           : Ptr32 Void
    16.    +0x00c GrantedAccess    : Uint4B
    17.  
    18.  
    19. 0:000> dt SYSTEM_HANDLE_INFORMATION_EX
    20. ntkrpamp!SYSTEM_HANDLE_INFORMATION_EX
    21.    +0x000 NumberOfHandles  : Uint4B
    22.    +0x004 Reserved         : Uint4B
    23.    +0x008 Handles          : [1] _SYSTEM_HANDLE_TABLE_ENTRY_INFO_EX
    24.  
    25. 0:000> dt SYSTEM_HANDLE_TABLE_ENTRY_INFO_EX
    26. ntkrpamp!SYSTEM_HANDLE_TABLE_ENTRY_INFO_EX
    27.    +0x000 Object           : Ptr32 Void
    28.    +0x004 UniqueProcessId  : Uint4B
    29.    +0x008 HandleValue      : Uint4B
    30.    +0x00c GrantedAccess    : Uint4B
    31.    +0x010 CreatorBackTraceIndex : Uint2B
    32.    +0x012 ObjectTypeIndex  : Uint2B
    33.    +0x014 HandleAttributes : Uint4B
    34.    +0x018 Reserved         : Uint4B
    35.  
    36.  
    37. 0:000> dt OBJECT_TYPE_INFORMATION
    38. ntkrpamp!OBJECT_TYPE_INFORMATION
    39.    +0x000 TypeName         : _UNICODE_STRING
    40.    +0x008 TotalNumberOfObjects : Uint4B
    41.    +0x00c TotalNumberOfHandles : Uint4B
    42.    +0x010 TotalPagedPoolUsage : Uint4B
    43.    +0x014 TotalNonPagedPoolUsage : Uint4B
    44.    +0x018 TotalNamePoolUsage : Uint4B
    45.    +0x01c TotalHandleTableUsage : Uint4B
    46.    +0x020 HighWaterNumberOfObjects : Uint4B
    47.    +0x024 HighWaterNumberOfHandles : Uint4B
    48.    +0x028 HighWaterPagedPoolUsage : Uint4B
    49.    +0x02c HighWaterNonPagedPoolUsage : Uint4B
    50.    +0x030 HighWaterNamePoolUsage : Uint4B
    51.    +0x034 HighWaterHandleTableUsage : Uint4B
    52.    +0x038 InvalidAttributes : Uint4B
    53.    +0x03c GenericMapping   : _GENERIC_MAPPING
    54.    +0x04c ValidAccessMask  : Uint4B
    55.    +0x050 SecurityRequired : UChar
    56.    +0x051 MaintainHandleCount : UChar
    57.    +0x054 PoolType         : Uint4B
    58.    +0x058 DefaultPagedPoolCharge : Uint4B
    59.    +0x05c DefaultNonPagedPoolCharge : Uint4B
     
  10. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Sol_Ksacap
    Не может быть полезным. Есть тулзы по типу pdbdump. Ваши листинги в каждом топике не к месту.
     
  11. HiroProtagonist

    HiroProtagonist New Member

    Публикаций:
    0
    Регистрация:
    18 сен 2009
    Сообщения:
    9
    2cpplamo

    а можно узнать, что есть директория объектов?
     
  12. cpplamo

    cpplamo New Member

    Публикаций:
    0
    Регистрация:
    11 авг 2009
    Сообщения:
    38
    Красивого определения я сейчас не сформулирую, утро, хочется спать :)
    Если вам действительно интересно, скачайте WinObjEx, данная утилита как раз представляет собой браузер директории объектов. Список типов объектов может быть найден в поддиректории \ObjectTypes. К сожалению, какой-либо дополнительной информации эта утилита не предоставляет, но можно быстро написать свой собственный аналог просмотрщика объектов и вытянуть из них интересующую индексы, имена типов. Можно создать массив из типов и выбирать из него по имени необходимый индекс или наоборот. Вот собственно и все :)
     
  13. cpplamo

    cpplamo New Member

    Публикаций:
    0
    Регистрация:
    11 авг 2009
    Сообщения:
    38
    Вы бы для начала Клерк, сходили по ссылке и прочитали, а уже потом строили из себя "элитунах". Там описаны простые методики перечисления описателей, как раз, что нужно ТС. Так что думаю ссылка действительно может быть полезна. Равно как и дамп структур.

    Приходиться постить дважды, нет возможности редактировать :dntknw:
     
  14. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    cpplamo
    Что я по этой ссылке увижу ??
    А элита.. так я она и есть.)
    Описание структур в символах и сурцах венды, ссылки фтопку.
     
  15. x64

    x64 New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2008
    Сообщения:
    1.370
    Адрес:
    Россия
    Как моя говорит... у тебя нимб не вырос ещё? С крыльями, не? А то смотри, превратишься )
     
  16. x64

    x64 New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2008
    Сообщения:
    1.370
    Адрес:
    Россия
    На всякий случай для всех сделаю акцент: класс информации SystemHandleInformation устарел, используйте SystemExtendedHandleInformation и соответствующие структуры с _EX префиксом.
     
  17. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    ZwQuerySystemInformation вообще не рекомендуется использовать.