Как стать автором
Обновить

Проблемы использования функции NtQuerySystemInformation с недокументированными аргументами

Время на прочтение 5 мин
Количество просмотров 8.9K
Всего голосов 33: ↑32 и ↓1 +31
Комментарии 3

Комментарии 3

А то, что написанная ещё во времена Windows NT функция NtQuerySystemInformation(SystemHandleInformation,...) имела (и имеет) некоторый вполне ограниченный внутренний буфер. Я не нашел нигде точного указания его размера, но, очевидно, что он не был рассчитан на миллион дескрипторов. В итоге функция возвращает их «сколько может», а значит среди них может оказаться, а может и не оказаться искомый.

Мне кажется, что суть проблемы не в каком-то ограниченном внутреннем буфере. Если внимательно посмотреть на SYSTEM_HANDLE_TABLE_ENTRY_INFO, то можно обнаружить, что HandleValue имеет тип USHORT, который имеет размер всего 2-а байта (поле не может быть больше 0xFFFF).


А в новой структуре SYSTEM_HANDLE_TABLE_ENTRY_INFO_EX это поле (HandleValue) уже имеет тип ULONG_PTR.

Да, тоже может быть.
ExSnapShotHandleTables и ExSnapShotHandleTablesEx идентичны за исключением используемой структуры (SYSTEM_HANDLE_TABLE_ENTRY_INFO vs SYSTEM_HANDLE_TABLE_ENTRY_INFO_EX)
Зарегистрируйтесь на Хабре , чтобы оставить комментарий