Получить имя всех дескрипторов в текущем процессе - PullRequest
6 голосов
/ 04 января 2012

Мне нужно перечислить все открытые дескрипторы в текущем процессе.Так как я не мог найти такую ​​функцию, как «EnumHandles», я думал о создании цикла от 0 до 1000. Вопрос в том, как я могу получить имя каждого дескриптора?Я использую c ++ и ОС Win7 32-разрядная. РЕДАКТИРОВАТЬ: дескриптор мне нужно имя Mutex.Сравнивая имя мьютекса, я хочу получить идентификатор дескриптора, который, как мне кажется, нашел решение с помощью OpenMutex, но я не знаю, что передать на 3-й параметр,

1 Ответ

5 голосов
/ 04 января 2012

Я считаю, что вы должны использовать NTDLL.DLL. Насколько мне известно, это то, что все инструменты, отслеживающие процессы, обрабатывает и другую системную информацию, должны использовать в конце концов под Windows. Я использовал его в небольшом инструменте Win32, однако никогда не приходилось перечислять дескрипторы.

Проверьте здесь хорошее введение в эту библиотеку и связанное с вашим вопросом. http://forum.sysinternals.com/howto-enumerate-handles_topic18892.html

Также функция GetObjectName в первом посте http://forum.sysinternals.com/enumerate-opened-files_topic3577.html

Доступ к такой информации в Windows может показаться трудоемким и выглядит пугающе, потому что Microsoft не хочет ее поддерживать, но вы увидите, что когда «простой» API не дает вам то, что вам нужно, вы надо копать до NTDLL. Это то, что инструменты вроде ProcessExplorer используют в конце. Это не так сложно в использовании: загрузите DLL, получите правильные указатели на функции, чтобы заполнить структуры, которые вы объявите сами, тем, что вы найдете в сети.

...