2012-01-03 14 views
6

Muszę wyświetlić listę wszystkich otwartych uchwytów w bieżącym procesie. Ponieważ nie mogłem znaleźć żadnej funkcji, takiej jak "EnumHandles", myślałem o zrobieniu pętli od 0 do 1000. Pytanie brzmi, w jaki sposób mogę pobrać nazwę każdego uchwytu? Używam C++, a system operacyjny to Win7 32-bitowy EDIT: Uchwyt, którego potrzebuję, to nazwa Mutex. Porównując nazwa mutex, chcę uzyskać identyfikator uchwyt wydaje mi się, że znalazłem rozwiązanie używając OpenMutex, ale nie wiem, co przechodzą na 3 parametruUzyskaj nazwy wszystkich uchwytów w bieżącym procesie

+2

Co masz na myśli przez "nazwę każdego uchwytu"? Uchwyty nie mają nazw. Masz na myśli identyfikator handle, odpowiednie klasy okien lub tytuły tekstowe? –

+0

Nie wszystkie uchwyty odnoszą się do plików z nazwami. Czy rozważałeś przeglądanie procesu Explorer? –

+0

To podejście nie działa. Jakie rodzaje uchwytów? – SLaks

Odpowiedz

5

wierzę, trzeba użyć NTDLL.DLL. Z mojej wiedzy wynika, że ​​wszystkie narzędzia do monitorowania procesów, uchwytów i innych informacji systemowych muszą w końcu korzystać z systemu Windows. Użyłem go w małym narzędziu Win32, jednak nigdy nie musiałem wymieniać uchwytów.

Tutaj znajdziesz dobre wprowadzenie do tej biblioteki i powiązane z pytaniem. http://forum.sysinternals.com/howto-enumerate-handles_topic18892.html

Również funkcja GetObjectName w pierwszym stanowisku http://forum.sysinternals.com/enumerate-opened-files_topic3577.html

Dostęp do tego rodzaju informacji w systemie Windows może wydawać się dużo pracy i wygląda przerażające, ponieważ Microsoft nie chce go wspierać, ale widać że gdy "łatwy" API nie daje ci tego, czego potrzebujesz, musisz wykopać do NTDLL. Właśnie takie narzędzia jak ProcessExplorer używają w końcu. To nie jest takie trudne w użyciu: załaduj bibliotekę DLL, uzyskaj odpowiednie wskaźniki funkcji, aby wypełnić deklarowane przez ciebie struktury, korzystając z tego, co znajdziesz w sieci.

+0

Nie jestem mentorem procesów, to uchwyt znajduje się w bieżącym procesie – WePro2

+0

źle to wyjaśniłem. Biblioteka NTDLL.DLL służy do uzyskiwania informacji o głębokich informacjach systemowych (procesach, uchwytach itp.). To jest DLL, który jest nieudokumentowany przez Microsoft, ale możesz znaleźć dokumentację pod linkami, które podałem, lub przez Google. Trzeba tylko znać struktury i funkcje wywoływać w DLL. – fury

+0

Wygląda na to, że wiele pracy wymaga podania nazwy uchwytów. Myślę, że OpenMutex może być odpowiedź, której szukam, ale nie jestem pewien, czy muszę przekazać pełną ścieżkę mutex (\ Sessions \ 1 \ BaseNamedObjects \ somemutex) lub po prostu somemutex na 3rd parametr. Próbowałem obu, ale nie udało się – WePro2

Powiązane problemy