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
Odpowiedz
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.
Nie jestem mentorem procesów, to uchwyt znajduje się w bieżącym procesie – WePro2
ź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
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
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? –
Nie wszystkie uchwyty odnoszą się do plików z nazwami. Czy rozważałeś przeglądanie procesu Explorer? –
To podejście nie działa. Jakie rodzaje uchwytów? – SLaks