Мне нужно указать все открытые ручки в текущем процессе. Поскольку я не мог найти какую-либо функцию типа «EnumHandles», я думал о создании цикла от 0 до 1000. Вопрос в том, как я могу получить имя каждого дескриптора? Я использую C++, а ОС - Win7 32-bit EDIT: Ручка, мне нужно имя Mutex. Сравнивая имя мьютекса, я хочу, чтобы получить ручку идентификатор Я, кажется, нашел решение с использованием OpenMutex, но я не знаю, что пройти на 3-й параметр,Получить имя всех ручек в текущем процессе
ответ
Я считаю, вы должны использовать 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, получить правильные указатели на функции, чтобы заполнить структуры, которые вы заявляете, с тем, что вы найдете в сети.
Я не наставляю процессы, это ручка, расположенная в текущем процессе. – WePro2
Я плохо объяснил это. Библиотека NTDLL.DLL предназначена для получения информации о глубокой системной информации (процессы, дескрипторы и т. Д.). Это DLL, которая не документирована Microsoft, но вы можете найти документацию по ссылкам, которые я дал, или по поисковому запросу. Вам просто нужно знать структуры и функции для вызова в DLL. – fury
Очень много работы, чтобы получить название ручек. Я думаю, что OpenMutex может быть ответом, который я ищу, но я не уверен, что мне нужно пройти полный путь к mutex (\ Sessions \ 1 \ BaseNamedObjects \ somemutex) или просто somemutex по 3-му параметру. Я попробовал оба, но не добился успеха – WePro2
Что вы подразумеваете под «именем каждого дескриптора»? Ручки не имеют имен. Вы имеете в виду идентификатор дескриптора, соответствующие классы окон или текстовые заголовки? –
Не все дескрипторы относятся к файлам с именами. Рассматривали ли вы просмотр Process Explorer? –
Этот подход не будет работать. Какие ручки? – SLaks