Alle Process Handles auflisten





  • Youka schrieb:

    EnumProcesses
    CreateToolhelp32Snapshot, Process32First, Process32Next

    Ich will keine Handles erzeugen sondern alle geöffneten Handles, die via OpenProcess erzeugt wurden, auflisten 😉



  • Versuchs mal mit

    NtQuerySystemInformation( /*...*/ SystemExtendedHandleInformation /*...*/ )
    

    und

    NtQueryObject ( /*...*/ ObjectTypeInformation /*...*/ ) 
    NtQueryObject ( /*...*/ ObjectNameInformation /*...*/ )
    

    Kannst ja in die Processhacker Source schaun. Besonders "PhHandleProviderUpdate" in "hndlprv.c", das ist die Methode in der die Handles aktualisiert werden.





  • @Alexey
    Das hat doch mit der Frage nichts zu tun.



  • Wieso eigentlich ausgerechnet nur Handles, die mit OpenProcess() erzeugt wurden?



  • dot schrieb:

    Wieso eigentlich ausgerechnet nur Handles, die mit OpenProcess() erzeugt wurden?

    Weil ich nicht will, dass man meinen Prozess mit OpenProcess öffnet :p

    Also momentan bin ich schon soweit, dass ich den Handletyp auslesen kann, aber wenn ich dann versuche den Namen vom Handle auszulesen, bekomme ich einfach einen leeren Buffer.

    if(typeString.find(L"Process") != std::string::npos)
    {
    
    				if(pSysHandleInformation->Handles[i].GrantedAccess != 0x0012019F
    					&& pSysHandleInformation->Handles[i].GrantedAccess != 0x001A019F
    					&& pSysHandleInformation->Handles[i].GrantedAccess != 0x00120189
    					&& pSysHandleInformation->Handles[i].GrantedAccess != 0x00100000)
    				{
    					POBJECT_NAME_INFORMATION pObjectNameInfo = new OBJECT_NAME_INFORMATION();
    					DWORD sizeObjectName = sizeof(OBJECT_NAME_INFORMATION);
    
    					NTSTATUS nameReturn = pNtQueryObject(dupHandle, (OBJECT_INFORMATION_CLASS)ObjectNameInformation, pObjectNameInfo, sizeof(OBJECT_NAME_INFORMATION), &sizeObjectName);
    
    					if(nameReturn == STATUS_INFO_LENGTH_MISMATCH)
    					{
    						delete pObjectNameInfo;
    						pObjectNameInfo = (POBJECT_NAME_INFORMATION)new BYTE[sizeObjectName];
    
    						if(pNtQueryObject(dupHandle, (OBJECT_INFORMATION_CLASS)ObjectNameInformation, pObjectNameInfo, sizeObjectName, nullptr) != STATUS_SUCCESS)
    						{
    							delete pObjectNameInfo;
    							CloseHandle(dupHandle);
    							continue;
    						}
    					}
    
                        //Leerer Buffer
    					MessageBoxW(0, pObjectNameInfo->Name.Buffer, L"", 0);
    
    					delete pObjectNameInfo;
    				}
    }
    


  • Mila schrieb:

    Weil ich nicht will, dass man meinen Prozess mit OpenProcess öffnet :p

    Wieso? Wenn du das zu Lernzwecken machen willst, dann mach es, aber wenn du meinst dich damit gegen irgendwas abzusichern, liegst du wohl ziemlich daneben... 😉



  • dot schrieb:

    Mila schrieb:

    Weil ich nicht will, dass man meinen Prozess mit OpenProcess öffnet :p

    Wieso? Wenn du das zu Lernzwecken machen willst, dann mach es, aber wenn du meinst dich damit gegen irgendwas abzusichern, liegst du wohl ziemlich daneben... 😉

    Nichts ist absolut sicher.
    Ich hab nur keine andere Möglichkeit, weil ich unter 64 Bit leider nicht in den Kernel Mode komme 😉



  • Und wie genau soll das Auflisten der Handles deinen Prozess schützen ? 😕

    bekomme ich einfach einen leeren Buffer.

    Hab grade hier gesehen dass die handles unbenannt sind. Deshalb bekommst du auch keinen Namen.

    Den Pfad (samt Namen) bekommst du z.B. durch "NtQuerySystemInformation" mit "SystemProcessIdInformation".


Anmelden zum Antworten