Funzione ZwQueryInformationProcess

[ZwQueryInformationProcess può essere modificato o non disponibile nelle versioni future di Windows. Le applicazioni devono usare le funzioni alternative elencate in questo argomento.

Recupera informazioni sul processo specificato.

Sintassi

NTSTATUS WINAPI ZwQueryInformationProcess(
  _In_      HANDLE           ProcessHandle,
  _In_      PROCESSINFOCLASS ProcessInformationClass,
  _Out_     PVOID            ProcessInformation,
  _In_      ULONG            ProcessInformationLength,
  _Out_opt_ PULONG           ReturnLength
);

Parametri

ProcessHandle [in]

Handle per il processo per cui recuperare le informazioni.

ProcessInformationClass [in]

Tipo di informazioni sul processo da recuperare. Questo parametro può essere uno dei valori seguenti dell'enumerazione PROCESSINFOCLASS .

Valore Significato
ProcessBasicInformation
0
Recupera un puntatore a una struttura PEB che può essere usata per determinare se il processo specificato viene eseguito il debug e un valore univoco utilizzato dal sistema per identificare il processo specificato.
È consigliabile usare le funzioni CheckRemoteDebuggerPresent e GetProcessId per ottenere queste informazioni.
ProcessDebugPort
7
Recupera un valore DWORD_PTR che corrisponde al numero di porta del debugger per il processo. Un valore diverso da zero indica che il processo viene eseguito sotto il controllo di un debugger ring 3.
È consigliabile usare la funzione CheckRemoteDebuggerPresent o IsDebuggerPresent .
ProcessWow64Information
26
Determina se il processo è in esecuzione nell'ambiente WOW64 (WOW64 è l'emulatore x86 che consente alle applicazioni basate su Win32 di eseguire in Windows a 64 bit).
È consigliabile usare la funzione IsWow64Process per ottenere queste informazioni.
ProcessImageFileName
27
Recupera un valore UNICODE_STRING contenente il nome del file di immagine per il processo.
ProcessBreakOnTermination
29
Recupera un valore ULONG che indica se il processo è considerato critico.
Nota: Questo valore può essere usato a partire da Windows XP con SP3. A partire da Windows 8.1, è consigliabile usare IsProcessCritical.
ProcessProtectionInformation
61
Recupera un valore BYTE che indica il tipo di processo protetto e il segno del processo protetto.

 

ProcessInformation [out]

Puntatore a un buffer fornito dall'applicazione chiamante in cui la funzione scrive le informazioni richieste. Le dimensioni delle informazioni scritte variano a seconda del valore del parametro ProcessInformationClass :

PROCESS_BASIC_INFORMATION

Quando il parametro ProcessInformationClass è ProcessBasicInformation, il buffer a cui punta il parametro ProcessInformation deve essere sufficiente per contenere una singola struttura PROCESS_BASIC_INFORMATION con il layout seguente:

typedef struct _PROCESS_BASIC_INFORMATION {
    NTSTATUS ExitStatus;
    PPEB PebBaseAddress;
    ULONG_PTR AffinityMask;
    KPRIORITY BasePriority;
    ULONG_PTR UniqueProcessId;
    ULONG_PTR InheritedFromUniqueProcessId;
} PROCESS_BASIC_INFORMATION;
Campo Significato
ExitStatus Contiene lo stesso valore restituito da GetExitCodeProcess . Tuttavia, l'uso di GetExitCodeProcess è preferibile per chiarezza e sicurezza.
PebBaseAddress Punta a una struttura PEB .
AffinityMask Può essere eseguito il cast in una DWORD e contiene lo stesso valore restituito da GetProcessAffinityMask per il lpProcessAffinityMask parametro.
BasePriority Contiene la priorità del processo come descritto in Priorità di pianificazione.
UniqueProcessId Può essere eseguito il cast in una DWORD e contiene un identificatore univoco per questo processo. È consigliabile usare la funzione GetProcessId per recuperare queste informazioni.
EreditatoFromUniqueProcessId Può essere eseguito il cast in una DWORD e contiene un identificatore univoco per il processo padre.

ULONG_PTR

Quando il parametro ProcessInformationClass è ProcessWow64Information, il buffer a cui punta il parametro ProcessInformation deve essere sufficiente per contenere un ULONG_PTR. Se questo valore è diverso da zero, il processo viene eseguito in un ambiente WOW64; in caso contrario, se il valore è uguale a zero, il processo non è in esecuzione in un ambiente WOW64.

È consigliabile usare la funzione IsWow64Process per determinare se un processo è in esecuzione nell'ambiente WOW64.

UNICODE_STRING

Quando il parametro ProcessInformationClass è ProcessImageFileName, il buffer a cui punta il parametro ProcessInformation deve essere sufficiente per contenere una struttura UNICODE_STRING e la stringa stessa. La stringa archiviata nel membro buffer è il nome del file di immagine.

Se il buffer è troppo piccolo, la funzione ha esito negativo con il codice di errore STATUS_INFO_LENGTH_MISMATCH e il parametro ReturnLength è impostato sulla dimensione del buffer necessaria.

PS_PROTECTION

Quando il parametro ProcessInformationClass è ProcessProtectionInformation, il buffer a cui punta il parametro ProcessInformation deve essere sufficiente per contenere una singola struttura PS_PROTECTION con il layout seguente:

typedef struct _PS_PROTECTION {
    union {
        UCHAR Level;
        struct {
            UCHAR Type   : 3;
            UCHAR Audit  : 1;                  // Reserved
            UCHAR Signer : 4;
        };
    };
} PS_PROTECTION, *PPS_PROTECTION;

I primi 3 bit contengono il tipo di processo protetto:

typedef enum _PS_PROTECTED_TYPE {
    PsProtectedTypeNone = 0,
    PsProtectedTypeProtectedLight = 1,
    PsProtectedTypeProtected = 2
} PS_PROTECTED_TYPE, *PPS_PROTECTED_TYPE;

I primi 4 bit contengono il firmatario del processo protetto:

typedef enum _PS_PROTECTED_SIGNER {
    PsProtectedSignerNone = 0,
    PsProtectedSignerAuthenticode,
    PsProtectedSignerCodeGen,
    PsProtectedSignerAntimalware,
    PsProtectedSignerLsa,
    PsProtectedSignerWindows,
    PsProtectedSignerWinTcb,
    PsProtectedSignerWinSystem,
    PsProtectedSignerApp,
    PsProtectedSignerMax
} PS_PROTECTED_SIGNER, *PPS_PROTECTED_SIGNER;

ProcessInformationLength [in]

Dimensioni del buffer a cui punta il parametro ProcessInformation , in byte.

ReturnLength [out, facoltativo]

Puntatore a una variabile in cui la funzione restituisce le dimensioni delle informazioni richieste. Se la funzione ha esito positivo, questa è la dimensione delle informazioni scritte nel buffer a cui punta il parametro ProcessInformation , ma se il buffer è troppo piccolo, questa è la dimensione minima del buffer necessaria per ricevere correttamente le informazioni.

Valore restituito

Restituisce un codice NTSTATUS riuscito o di errore.

I moduli e il significato dei codici di errore NTSTATUS sono elencati nel file di intestazione Ntstatus.h disponibile nel DDK e sono descritti nella documentazione DDK in Kernel-Mode L'architettura del driver / Guida alla progettazione / Tecniche di programmazione del driver / Errori di registrazione.

Commenti

La funzione ZwQueryInformationProcess e le strutture restituite sono interne al sistema operativo e soggette a modifiche da una versione di Windows a un'altra. Per mantenere la compatibilità dell'applicazione, è preferibile usare funzioni pubbliche menzionate nella descrizione del parametro ProcessInformationClass .

Se si usa ZwQueryInformationProcess, accedere alla funzione tramite il collegamento dinamico di runtime. Ciò consente al codice di rispondere in modo normale se la funzione è stata modificata o rimossa dal sistema operativo. Le modifiche alla firma, tuttavia, potrebbero non essere rilevabili.

Questa funzione non ha alcuna libreria di importazione associata. È necessario usare le funzioni LoadLibrary e GetProcAddress per collegare dinamicamente a Ntdll.dll.

Requisiti

Requisito Valore
Client minimo supportato
Windows XP [solo app desktop]
Server minimo supportato
Windows Server 2003 [solo app desktop]
DLL
Ntdll.dll

Vedi anche

CheckRemoteDebuggerPresent

GetProcessId

IsDebuggerPresent

IsWow64Process