Получил список хэндлов фунцией ZwQuerySystemInformation. Хэндл описывается структурой: Код (Text): typedef struct _SYSTEM_HANDLE { DWORD ProcessID; WORD HandleType; WORD HandleNumber; DWORD KernelAddress; DWORD Flags; } SYSTEM_HANDLE, * PSYSTEM_HANDLE; Но структура не документирована и хотелось бы в ней разобраться. 1. Какие значения принимает HandleType для каких типов хэндлов. 2. Как вообще вы добываете такую недокументированную информацию. Я честно капал поиск, но ничего...
kratorman Если я правильно помню, HandleType различается на разных системах (если не сервис паках) для одного и того же типа. Поэтому для проверки номера типа в рантайме создаётся объект и проверяется его HandleType.
Куда проще составить их таблицу в рантайме из директории объектов и получив все индексы оттуда сопоставлять.
Может быть полезным: Sysinternals HOWTO: Enumerate handles. И это: Код (Text): vista sp1 x32: 0:000> dt SYSTEM_HANDLE_INFORMATION ntkrpamp!SYSTEM_HANDLE_INFORMATION +0x000 NumberOfHandles : Uint4B +0x004 Handles : [1] _SYSTEM_HANDLE_TABLE_ENTRY_INFO 0:000> dt SYSTEM_HANDLE_TABLE_ENTRY_INFO ntkrpamp!SYSTEM_HANDLE_TABLE_ENTRY_INFO +0x000 UniqueProcessId : Uint2B +0x002 CreatorBackTraceIndex : Uint2B +0x004 ObjectTypeIndex : UChar +0x005 HandleAttributes : UChar +0x006 HandleValue : Uint2B +0x008 Object : Ptr32 Void +0x00c GrantedAccess : Uint4B 0:000> dt SYSTEM_HANDLE_INFORMATION_EX ntkrpamp!SYSTEM_HANDLE_INFORMATION_EX +0x000 NumberOfHandles : Uint4B +0x004 Reserved : Uint4B +0x008 Handles : [1] _SYSTEM_HANDLE_TABLE_ENTRY_INFO_EX 0:000> dt SYSTEM_HANDLE_TABLE_ENTRY_INFO_EX ntkrpamp!SYSTEM_HANDLE_TABLE_ENTRY_INFO_EX +0x000 Object : Ptr32 Void +0x004 UniqueProcessId : Uint4B +0x008 HandleValue : Uint4B +0x00c GrantedAccess : Uint4B +0x010 CreatorBackTraceIndex : Uint2B +0x012 ObjectTypeIndex : Uint2B +0x014 HandleAttributes : Uint4B +0x018 Reserved : Uint4B 0:000> dt OBJECT_TYPE_INFORMATION ntkrpamp!OBJECT_TYPE_INFORMATION +0x000 TypeName : _UNICODE_STRING +0x008 TotalNumberOfObjects : Uint4B +0x00c TotalNumberOfHandles : Uint4B +0x010 TotalPagedPoolUsage : Uint4B +0x014 TotalNonPagedPoolUsage : Uint4B +0x018 TotalNamePoolUsage : Uint4B +0x01c TotalHandleTableUsage : Uint4B +0x020 HighWaterNumberOfObjects : Uint4B +0x024 HighWaterNumberOfHandles : Uint4B +0x028 HighWaterPagedPoolUsage : Uint4B +0x02c HighWaterNonPagedPoolUsage : Uint4B +0x030 HighWaterNamePoolUsage : Uint4B +0x034 HighWaterHandleTableUsage : Uint4B +0x038 InvalidAttributes : Uint4B +0x03c GenericMapping : _GENERIC_MAPPING +0x04c ValidAccessMask : Uint4B +0x050 SecurityRequired : UChar +0x051 MaintainHandleCount : UChar +0x054 PoolType : Uint4B +0x058 DefaultPagedPoolCharge : Uint4B +0x05c DefaultNonPagedPoolCharge : Uint4B
Sol_Ksacap Не может быть полезным. Есть тулзы по типу pdbdump. Ваши листинги в каждом топике не к месту.
Красивого определения я сейчас не сформулирую, утро, хочется спать Если вам действительно интересно, скачайте WinObjEx, данная утилита как раз представляет собой браузер директории объектов. Список типов объектов может быть найден в поддиректории \ObjectTypes. К сожалению, какой-либо дополнительной информации эта утилита не предоставляет, но можно быстро написать свой собственный аналог просмотрщика объектов и вытянуть из них интересующую индексы, имена типов. Можно создать массив из типов и выбирать из него по имени необходимый индекс или наоборот. Вот собственно и все
Вы бы для начала Клерк, сходили по ссылке и прочитали, а уже потом строили из себя "элитунах". Там описаны простые методики перечисления описателей, как раз, что нужно ТС. Так что думаю ссылка действительно может быть полезна. Равно как и дамп структур. Приходиться постить дважды, нет возможности редактировать
cpplamo Что я по этой ссылке увижу ?? А элита.. так я она и есть.) Описание структур в символах и сурцах венды, ссылки фтопку.
На всякий случай для всех сделаю акцент: класс информации SystemHandleInformation устарел, используйте SystemExtendedHandleInformation и соответствующие структуры с _EX префиксом.