Инфопульс Украина corporate blog
C++
System Programming
Debugging
Development for Windows
Comments 3
+6
А то, что написанная ещё во времена Windows NT функция NtQuerySystemInformation(SystemHandleInformation,...) имела (и имеет) некоторый вполне ограниченный внутренний буфер. Я не нашел нигде точного указания его размера, но, очевидно, что он не был рассчитан на миллион дескрипторов. В итоге функция возвращает их «сколько может», а значит среди них может оказаться, а может и не оказаться искомый.

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


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

+1
ExSnapShotHandleTables и ExSnapShotHandleTablesEx идентичны за исключением используемой структуры (SYSTEM_HANDLE_TABLE_ENTRY_INFO vs SYSTEM_HANDLE_TABLE_ENTRY_INFO_EX)
Only those users with full accounts are able to leave comments., please.