Verzweiflung!!!



  • 😡 Wie ermittle ich den vollständigen Pfad von laufenden Prozessen??? 😡

    Bitte helft mir, is echt dringend!!



  • Hi,

    Verwende GetModuleFileName (bzw. die Ex-Version).

    PS: Überleg Dir beim nächsten Mal doch einen passenderen Namen für Deinen Thread 🤡 .



  • Das hast du ein paar threads weiter unten schon gefragt und ich hatte dir geantwortet. Wenn du nicht weißt wie man das debug-privileg setzt benutz doch mal google.



  • Hy Leute,

    danke für die Vorschläge. Ich habe hier mal meinen Code:

    Zu CodeFinder:

    #include <windows.h>
    #include <tlhelp32.h>
    #include <stdio.h>
    #include <psapi.h>
    
    int main(int argc, char* argv[])
    {
    HANDLE hSnapShot = CreateToolhelp32Snapshot ( TH32CS_SNAPPROCESS, 0);
    
    PROCESSENTRY32* processInfo = new PROCESSENTRY32;
    processInfo->dwSize = sizeof ( PROCESSENTRY32);
    
    while ( Process32Next ( hSnapShot,processInfo ) != FALSE)
    {
        TCHAR pfad[MAX_PATH];
        HANDLE h=OpenProcess(PROCESS_ALL_ACCESS,FALSE,processInfo->th32ProcessID);
        GetModuleFileNameEx(h,NULL,pfad,sizeof(pfad)/sizeof(TCHAR));
        printf ( "Prozess %05d: %s.\n", processInfo->th32ProcessID,processInfo->szExeFile);
    };
    
    CloseHandle ( hSnapShot);
    
    delete processInfo;
    
    system("Pause");
    
    return 0;
    }
    

    Jetzt bekomme ich aber immer die Fehlermeldung:

    [Linker Error] undefined reference to 'GetModuleFileNameExA@16'
    Id returnded 1 exit status
    

    Kannste mir helfen?

    Zu Black Shadow:

    Ich habe das mit dem debug-privileg rausbekommen, aber der Pfad wird immer noch nicht angezeigt?!

    Hier mein Code:

    #include <windows.h>
    #include <tlhelp32.h>
    #include <stdio.h>
    #include <psapi.h>
    
    // Set/Unset specified privilige for given handle
    BOOL SetPrivilege(HANDLE hToken, /* token handle*/ LPCTSTR Privilege, /* Privilege to enable/disable*/ BOOL bEnablePrivilege /* TRUE to enable. FALSE to disable)*/)
    {
     TOKEN_PRIVILEGES tp;
     LUID luid;
     TOKEN_PRIVILEGES tpPrevious;
     DWORD cbPrevious=sizeof(TOKEN_PRIVILEGES);
    
     if(!LookupPrivilegeValue( NULL, Privilege, &luid ))
      return FALSE;
    
     //
     // first pass.  get current privilege setting
     //
     tp.PrivilegeCount           = 1;
     tp.Privileges[0].Luid       = luid;
     tp.Privileges[0].Attributes = 0;
    
     AdjustTokenPrivileges(hToken,
                           FALSE,
                           &tp,
                           sizeof(TOKEN_PRIVILEGES),
                           &tpPrevious,
                           &cbPrevious);
    
     if (GetLastError() != ERROR_SUCCESS)
      return FALSE;
    
     //
     // second pass.  set privilege based on previous setting
     //
     tpPrevious.PrivilegeCount       = 1;
     tpPrevious.Privileges[0].Luid   = luid;
    
     if(bEnablePrivilege)
     {
      tpPrevious.Privileges[0].Attributes |= (SE_PRIVILEGE_ENABLED);
     }
     else
     {
      tpPrevious.Privileges[0].Attributes ^= (SE_PRIVILEGE_ENABLED &
      tpPrevious.Privileges[0].Attributes);
     }
    
     AdjustTokenPrivileges(hToken,
                           FALSE,
                           &tpPrevious,
                           cbPrevious,
                           NULL,
                           NULL);
    
     if (GetLastError() != ERROR_SUCCESS)
      return FALSE;
    
     return TRUE;
    }
    
    int main(int argc, char* argv[])
    {
    HANDLE hSnapShot = CreateToolhelp32Snapshot ( TH32CS_SNAPPROCESS, 0);
    
    PROCESSENTRY32* processInfo = new PROCESSENTRY32;
    processInfo->dwSize = sizeof ( PROCESSENTRY32);
    
    while ( Process32Next ( hSnapShot,processInfo ) != FALSE)
    {    
        HANDLE h=OpenProcess(PROCESS_ALL_ACCESS,FALSE,processInfo->th32ProcessID);
        SetPrivilege( h,SE_DEBUG_NAME,TRUE);    
        printf ( "Prozess %05d: %s.\n", processInfo->th32ProcessID,processInfo->szExeFile);
    };
    
    CloseHandle ( hSnapShot);
    
    delete processInfo;
    
    system("Pause");
    
    return 0;
    }
    

    Es gibt zwar keine Fehlermeldungen, aber der Pfad wird nicht angezeigt. Warum?



  • tsp schrieb:

    (...) aber der Pfad wird nicht angezeigt. Warum?

    Process32First/Next liefert immer nur den Namen des Prozesses, aber keinen Pfad. Einen "Prozesspfad" gibt es nicht.

    Du musst Dir bei jedem Prozess mit Module32First/Next alle Module anzeigen lassen und "raten", welches der Module den Prozess "darstellt."

    Das "Debug-Privileg" braucht Dein eigenes Programm (standardmässig disabled), da Module32First/Next sonst bei "Systemprozessen" nichts liefert.

    // !!! Es wäre zu empfehlen einige Fehlerabfragen einzubauen !!!
    // !!!      Sämtliche Funktionen sind wohldokumentiert       !!!
    
    // 1. Debug-Privileg setzen :
    
     HANDLE           h1;
     TOKEN_PRIVILEGES tp;
    
     RtlFillMemory         (&tp,sizeof(tp),0);
    
     tp.PrivilegeCount           = 1;
     tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
    
     LookupPrivilegeValue  (0,"SeDebugPrivilege",&tp.Privileges[0].Luid);
     OpenProcessToken      (GetCurrentProcess(),TOKEN_ALL_ACCESS,&h1);
     AdjustTokenPrivileges (h1,0,&tp,0,0,0);
     CloseHandle           (h1);
    
    // 2. Sämtliche Prozesse incl. Module anzeigen :
    
     HANDLE         hSnapProcess;
     PROCESSENTRY32 processInfo; processInfo.dwSize = sizeof (processInfo);
     HANDLE         hSnapModule;
     MODULEENTRY32  moduleInfo;  moduleInfo.dwSize  = sizeof (moduleInfo);
    
     hSnapProcess  = CreateToolhelp32Snapshot (TH32CS_SNAPPROCESS,0);
    
     Process32First (hSnapProcess,&processInfo); // !
    
     do {
      printf ("Prozess : %s\n",processInfo.szExeFile); // viel spass beim parsen :-)
    
      hSnapModule = CreateToolhelp32Snapshot (TH32CS_SNAPMODULE,processInfo.th32ProcessID);
    
      Module32First (hSnapModule,&moduleInfo); // !
    
      do {
       printf ("  Modul : %s\n",moduleInfo.szExePath); // dito
      } while ( Module32Next (hSnapModule,&moduleInfo) );
    
      CloseHandle   (hSnapModule);
    
     } while ( Process32Next (hSnapProcess,&processInfo) );
    
     CloseHandle    (hSnapProcess);
    


  • Danke merker,

    das funzt schon sehr gut 😋 😋
    aber irgendwie gibt mir das Programm nur ganz wenige prozesse aus (ca. 4-5)
    Wieso, was mach ich falsch ?



  • Hy merker,
    😃
    vergiss die letzt Frage, war mein Fehler, hab ihn schon beseitigt.
    Echt noch mal vielen Dank. Genau das, was ich wollte! 👍


Anmelden zum Antworten