Not
Åtkomst till denna sida kräver auktorisation. Du kan prova att logga in eller byta katalog.
Åtkomst till denna sida kräver auktorisation. Du kan prova att byta katalog.
Följande exempelkod använder funktionen EnumProcesses för att hämta processidentifieraren för varje processobjekt i systemet. EnumProcessModules anropas sedan för att hämta varje processnamn och skriva ut det.
Not
För 64-bitarsprocesser använder du funktionen EnumProcessModulesEx.
#include <windows.h>
#include <stdio.h>
#include <tchar.h>
#include <psapi.h>
// To ensure correct resolution of symbols, add Psapi.lib to TARGETLIBS
// and compile with -DPSAPI_VERSION=1
void PrintProcessNameAndID( DWORD processID )
{
TCHAR szProcessName[MAX_PATH] = TEXT("<unknown>");
// Get a handle to the process.
HANDLE hProcess = OpenProcess( PROCESS_QUERY_INFORMATION |
PROCESS_VM_READ,
FALSE, processID );
// Get the process name.
if (NULL != hProcess )
{
HMODULE hMod;
DWORD cbNeeded;
if ( EnumProcessModules( hProcess, &hMod, sizeof(hMod),
&cbNeeded) )
{
GetModuleBaseName( hProcess, hMod, szProcessName,
sizeof(szProcessName)/sizeof(TCHAR) );
}
}
// Print the process name and identifier.
_tprintf( TEXT("%s (PID: %u)\n"), szProcessName, processID );
// Release the handle to the process.
CloseHandle( hProcess );
}
int main( void )
{
// Get the list of process identifiers.
DWORD aProcesses[1024], cbNeeded, cProcesses;
unsigned int i;
if ( !EnumProcesses( aProcesses, sizeof(aProcesses), &cbNeeded ) )
{
return 1;
}
// Calculate how many process identifiers were returned.
cProcesses = cbNeeded / sizeof(DWORD);
// Print the name and process identifier for each process.
for ( i = 0; i < cProcesses; i++ )
{
if( aProcesses[i] != 0 )
{
PrintProcessNameAndID( aProcesses[i] );
}
}
return 0;
}
Huvudfunktionen hämtar en lista över processer med hjälp av funktionen EnumProcesses. För varje process anropar main funktionen PrintProcessNameAndID och skickar den processidentifieraren. PrintProcessNameAndID anropar i sin tur funktionen OpenProcess för att hämta processhandtaget. Om OpenProcess misslyckas, visas processnamnet som <okänt>. Till exempel misslyckas OpenProcess- för inaktiva processer och CSRSS-processer eftersom deras åtkomstbegränsningar hindrar kod på användarnivå från att öppna dem. Sedan anropar PrintProcessNameAndID funktionen EnumProcessModules för att hämta modulreferenserna. Slutligen anropar PrintProcessNameAndID funktionen GetModuleBaseName för att hämta namnet på den körbara filen och visar namnet tillsammans med processidentifieraren.