Как перечислить все открытые дескрипторы указанного процесса в ядре (Windows)

У меня есть драйвер ядра. Как я могу перечислить все открытые дескрипторы указанного процесса в моем драйвере ядра? Я хочу закрыть эти ручки.

Спасибо!


person Roman    schedule 14.10.2012    source источник
comment
Вы пробовали обозреватель процессов?   -  person Alexey Frunze    schedule 14.10.2012
comment
@AlexeyFrunze: Я предполагаю, что он хочет написать код в своем драйвере ядра, чтобы перечислить все дескрипторы указанного процесса.   -  person Gabe    schedule 14.10.2012
comment
@Gabe Может быть, но мы не знаем наверняка. Кстати, разве драйвер не должен иметь возможность отслеживать открытия устройства, потому что он должен получать открытые вызовы?   -  person Alexey Frunze    schedule 14.10.2012
comment
Опасный. Скорее всего, он остановится на трубках и почтовых ящиках.   -  person 0xC0000022L    schedule 14.10.2012
comment
Не говоря уже о случайном уничтожении файлов: stackoverflow.com/a/2611885/17034   -  person Hans Passant    schedule 15.10.2012
comment
@HansPassant: Возможно, он действительно хочет просто аннулировать дескриптор (например, что происходит с дескрипторами, открывающими файлы на диске после неожиданного извлечения), а не закрывать их.   -  person Gabe    schedule 15.10.2012


Ответы (1)


Я хочу закрыть эти ручки.

Как бы то ни было, просто потому, что что-то можно сделать, не означает, что это нужно делать. Это плохая идея.

Тем не менее, можно перечислить все дескрипторы для всех процессов, используя недокументированный вызов Zw / NtQuerySystemInformation с информационным классом SystemHandleInformation. Поиск в Интернете с использованием этих терминов даст то, что вы хотите.

person Bukes    schedule 14.10.2012