windows - Få procesoplysninger om hver proces

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg forsøger at oprette et program, som enhver normal bruger kan køre på Windows og generere en procesliste over alle processer, herunder den eksekverbare placering. Jeg har brugt CreateToolhelp32Snapshot () for at få alle procesnavne, pid, ppid. Men har problemer med at få billedbanen. Alt, hvad jeg gør, resulterer i stort set adgang nægtet.


Jeg har forsøgt ZwQueryInformationProcess, GetProcessImageFileName osv. Og bruger også OpenProcess til at få håndtaget til hver proces. Jeg kan få håndtaget ved at bruge PROCESS\_QUERY\_LIMITED\_INFORMATION, men enhver anden mulighed virker ikke. Jeg er tabt og har været i dette i et par dage. Kan nogen pege på mig i den rigtige retning?

Bedste reference


Dette er koden, der virker for ikke-admin bruger på Windows. Brug szExeFile-medlemmet PROCESSENTRY32 til at få stien:


HANDLE hProcessSnap = NULL;
HANDLE hProcess = NULL;
PROCESSENTRY32 pe32;
DWORD dwPriorityClass = 0;

// Take a snapshot of all processes in the system.
hProcessSnap = CreateToolhelp32Snapshot(TH32CS\_SNAPPROCESS, 0);
if (hProcessSnap == INVALID\_HANDLE\_VALUE)
{
    return;
}

// Set the size of the structure before using it.
pe32.dwSize = sizeof(PROCESSENTRY32);

// Retrieve information about the first process,
// and exit if unsuccessful
if (!Process32First(hProcessSnap, &pe32))
{
    CloseHandle(hProcessSnap);          // clean the snapshot object
    return;
}

// Now walk the snapshot of processes, and
// display information about each process in turn
do
{
    // do something with the pe32 struct.
    // pe32.szExeFile -> path of the file

} while (Process32Next(hProcessSnap, &pe32));

CloseHandle(hProcessSnap);