Freigeben über


ZwQueryInformationProcess-Funktion

[ZwQueryInformationProcess kann in zukünftigen Versionen von Windows geändert oder nicht verfügbar sein. Anwendungen sollten die in diesem Thema aufgeführten alternativen Funktionen verwenden.]

Ruft Informationen zum angegebenen Prozess ab.

Syntax

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

Parameter

ProcessHandle [in]

Ein Handle für den Prozess, für den Informationen abgerufen werden sollen.

ProcessInformationClass [in]

Der Typ der abzurufenden Prozessinformationen. Dieser Parameter kann einer der folgenden Werte aus der PROCESSINFOCLASS-Enumeration sein.

Wert Bedeutung
ProcessBasicInformation
0
Ruft einen Zeiger auf eine PEB-Struktur ab, mit der ermittelt werden kann, ob der angegebene Prozess debuggt wird, und einen eindeutigen Wert, der vom System verwendet wird, um den angegebenen Prozess zu identifizieren.
Es ist am besten, die Funktionen CheckRemoteDebuggerPresent und GetProcessId zu verwenden, um diese Informationen abzurufen.
ProcessDebugPort
7
Ruft einen DWORD_PTR Wert ab, der die Portnummer des Debuggers für den Prozess darstellt. Ein Nonzero-Wert gibt an, dass der Prozess unter der Kontrolle eines Ring 3-Debuggers ausgeführt wird.
Verwenden Sie am besten die Funktion CheckRemoteDebuggerPresent oder IsDebuggerPresent .
ProcessWow64Information
26
Bestimmt, ob der Prozess in der WOW64-Umgebung ausgeführt wird (WOW64 ist der x86-Emulator, mit dem Win32-basierte Anwendungen unter 64-Bit-Windows ausgeführt werden können).
Verwenden Sie am besten die IsWow64Process-Funktion , um diese Informationen abzurufen.
ProcessImageFileName
27
Ruft einen UNICODE_STRING Wert ab, der den Namen der Imagedatei für den Prozess enthält.
ProcessBreakOnTermination
29
Ruft einen ULONG-Wert ab, der angibt, ob der Prozess als kritisch eingestuft wird.
Hinweis: Dieser Wert kann ab Windows XP mit SP3 verwendet werden. Ab Windows 8.1 sollte stattdessen IsProcessCritical verwendet werden.
ProcessProtectionInformation
61
Ruft einen BYTE-Wert ab, der den Typ des geschützten Prozesses und den geschützten Prozess signierer angibt.

 

ProcessInformation [out]

Ein Zeiger auf einen Puffer, der von der aufrufenden Anwendung bereitgestellt wird, in den die Funktion die angeforderten Informationen schreibt. Die Größe der geschriebenen Informationen hängt vom Wert des Parameters ProcessInformationClass ab:

PROCESS_BASIC_INFORMATION

Wenn der ProcessInformationClass-ParameterProcessBasicInformation ist, sollte der Puffer, auf den der Parameter ProcessInformation verweist, groß genug sein, um eine einzelne PROCESS_BASIC_INFORMATION Struktur mit dem folgenden Layout aufzunehmen:

typedef struct _PROCESS_BASIC_INFORMATION {
    NTSTATUS ExitStatus;
    PPEB PebBaseAddress;
    ULONG_PTR AffinityMask;
    KPRIORITY BasePriority;
    ULONG_PTR UniqueProcessId;
    ULONG_PTR InheritedFromUniqueProcessId;
} PROCESS_BASIC_INFORMATION;
Feld Bedeutung
ExitStatus Enthält denselben Wert, den GetExitCodeProcess zurückgeben würde. Die Verwendung von GetExitCodeProcess ist jedoch aus Gründen der Klarheit und Sicherheit vorzuziehen.
PebBaseAddress Zeigt auf eine PEB-Struktur .
AffinitätMask Kann in ein DWORD umgewandelt werden und enthält denselben Wert, den GetProcessAffinityMask für den lpProcessAffinityMask Parameter zurückgeben würde.
BasePriority Enthält die Prozesspriorität, wie unter Terminplanungsprioritäten beschrieben.
UniqueProcessId Kann in ein DWORD umgewandelt werden und enthält einen eindeutigen Bezeichner für diesen Prozess. Es ist am besten, die GetProcessId-Funktion zu verwenden, um diese Informationen abzurufen.
InheritedFromUniqueProcessId Kann in ein DWORD umgewandelt werden und enthält einen eindeutigen Bezeichner für den übergeordneten Prozess.

ULONG_PTR

Wenn der ProcessInformationClass-ParameterProcessWow64Information ist, sollte der Puffer, auf den der ProcessInformation-Parameter verweist, groß genug sein, um eine ULONG_PTR aufzunehmen. Wenn dieser Wert nichtzero ist, wird der Prozess in einer WOW64-Umgebung ausgeführt. Andernfalls wird der Prozess nicht in einer WOW64-Umgebung ausgeführt, wenn der Wert gleich 0 ist.

Es empfiehlt sich, die IsWow64Process-Funktion zu verwenden, um zu bestimmen, ob ein Prozess in der WOW64-Umgebung ausgeführt wird.

UNICODE_STRING

Wenn der ProcessInformationClass-ParameterProcessImageFileName lautet, sollte der Puffer, auf den der ProcessInformation-Parameter verweist, groß genug sein, um eine UNICODE_STRING Struktur sowie die Zeichenfolge selbst zu speichern. Die im Pufferelement gespeicherte Zeichenfolge ist der Name der Imagedatei.

Wenn der Puffer zu klein ist, schlägt die Funktion mit dem STATUS_INFO_LENGTH_MISMATCH Fehlercode fehl, und der ReturnLength-Parameter wird auf die erforderliche Puffergröße festgelegt.

PS_PROTECTION

Wenn der ProcessInformationClass-ParameterProcessProtectionInformation ist, sollte der Puffer, auf den der Parameter ProcessInformation verweist, groß genug sein, um eine einzelne PS_PROTECTION Struktur mit dem folgenden Layout aufzunehmen:

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

Die ersten 3 Bits enthalten den Typ des geschützten Prozesses:

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

Die obersten 4 Bits enthalten den geschützten Prozess signierer:

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

ProcessInformationLength [in]

Die Größe des Puffers, auf den der ProcessInformation-Parameter in Bytes verweist.

ReturnLength [out, optional]

Ein Zeiger auf eine Variable, in der die Funktion die Größe der angeforderten Informationen zurückgibt. Wenn die Funktion erfolgreich war, ist dies die Größe der Informationen, die in den Puffer geschrieben werden, auf den der Parameter ProcessInformation verweist. Wenn der Puffer jedoch zu klein war, ist dies die mindeste Größe des Puffers, die erforderlich ist, um die Informationen erfolgreich zu empfangen.

Rückgabewert

Gibt einen NTSTATUS-Erfolgs- oder Fehlercode zurück.

Die Formen und Die Bedeutung von NTSTATUS-Fehlercodes sind in der Ntstatus.h-Headerdatei aufgeführt, die im DDK verfügbar ist, und werden in der DDK-Dokumentation unter Kernel-Mode Treiberarchitektur / Entwurfshandbuch / Treiberprogrammierungstechniken / Protokollierungsfehler beschrieben.

Hinweise

Die ZwQueryInformationProcess-Funktion und die von ihr zurückgegebenen Strukturen sind systemintern und können von einer Windows-Version in eine andere geändert werden. Um die Kompatibilität Ihrer Anwendung zu gewährleisten, ist es besser, stattdessen öffentliche Funktionen zu verwenden, die in der Beschreibung des Parameters ProcessInformationClass erwähnt werden.

Wenn Sie ZwQueryInformationProcess verwenden, greifen Sie auf die Funktion über dynamische Laufzeitverknüpfung zu. Dies gibt Ihrem Code die Möglichkeit, ordnungsgemäß zu reagieren, wenn die Funktion geändert oder aus dem Betriebssystem entfernt wurde. Signaturänderungen sind jedoch möglicherweise nicht erkennbar.

Diese Funktion verfügt über keine zugeordnete Importbibliothek. Sie müssen die Funktionen LoadLibrary und GetProcAddress verwenden, um eine dynamische Verknüpfung mit Ntdll.dll.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client)
Windows XP [nur Desktop-Apps]
Unterstützte Mindestversion (Server)
Windows Server 2003 [nur Desktop-Apps]
DLL
Ntdll.dll

Siehe auch

CheckRemoteDebuggerPresent

GetProcessId

IsDebuggerPresent

IsWow64Process