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 bestimmt werden kann, ob der angegebene Prozess gedebuggt wird, und einen eindeutigen Wert, der vom System zum Identifizieren des angegebenen Prozesses verwendet wird.
Es empfiehlt sich, 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 ist. Ein Wert ungleich 0 (null) gibt an, dass der Prozess unter der Kontrolle eines Ring-3-Debuggers ausgeführt wird.
Es ist am besten, die Funktion CheckRemoteDebuggerPresent oder IsDebuggerPresent zu verwenden.- ProcessWow64Information
- 26
Bestimmt, ob der Prozess in der WOW64-Umgebung ausgeführt wird (WOW64 ist der x86-Emulator, der win32-basierte Anwendungen auf 64-Bit-Windows ausführen kann).
Es ist am besten, die IsWow64Process-Funktion zu verwenden, um diese Informationen abzurufen.- ProcessImageFileName
- 27
Ruft einen UNICODE_STRING Wert ab, der den Namen der Bilddatei für den Prozess enthält. - ProcessBreakOnTermination
- 29
Ruft einen ULONG-Wert ab, der angibt, ob der Prozess als kritisch betrachtet wird. [!Note]
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 Signierer des geschützten Prozesses angibt. -
ProcessInformation [ out]
-
Ein Zeiger auf einen Puffer, der von der aufrufenden Anwendung bereitgestellt wird, in die die Funktion die angeforderten Informationen schreibt. Die Größe der geschriebenen Informationen hängt vom Wert des ProcessInformationClass-Parameters ab:
-
VERARBEITEN _ GRUNDLEGENDER _ INFORMATIONEN
-
Wenn der ProcessInformationClass-Parameter ProcessBasicInformation ist, sollte der Puffer, auf den der ProcessInformation-Parameter zeigt, groß genug sein, um eine einzelne PROCESS BASIC _ _ INFORMATION-Struktur mit folgendem Layout zu speichern:
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 Übersichtlichkeit und Sicherheit vorzuziehen. PebBaseAddress Zeigt auf eine PEB-Struktur. AffinityMask Kann in ein DWORD-Feld umgleitet werden und enthält denselben Wert, den GetProcessAffinityMask für den Parameter zurückgeben lpProcessAffinityMaskwürde.BasePriority Enthält die Prozesspriorität, wie unter Planungsprioritätenbeschrieben. UniqueProcessId Kann in ein DWORD-Feld umgleitet 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-Element umgleitet werden und enthält einen eindeutigen Bezeichner für den übergeordneten Prozess. -
ULONG _ PTR
-
Wenn der ProcessInformationClass-Parameter ProcessWow64Information ist, sollte der Puffer, auf den der ProcessInformation-Parameter zeigt, groß genug sein, um einen ULONG _ PTR zu enthalten. Wenn dieser Wert ungleich 0 (null) ist, wird der Prozess in einer WOW64-Umgebung ausgeführt. Andernfalls wird der Prozess in einer WOW64-Umgebung nicht ausgeführt, wenn der Wert gleich 0 (null) ist.
Es ist am besten, die IsWow64Process-Funktion zu verwenden, um zu bestimmen, ob ein Prozess in der WOW64-Umgebung ausgeführt wird.
-
UNICODE _ STRING
-
Wenn der ProcessInformationClass-Parameter ProcessImageFileName ist, sollte der Puffer, auf den der ProcessInformation-Parameter zeigt, groß genug sein, um eine UNICODE _ STRING-Struktur sowie die Zeichenfolge selbst zu enthalten. Die im Puffermember gespeicherte Zeichenfolge ist der Name der Bilddatei.
Wenn der Puffer zu klein ist, schlägt die Funktion mit dem Fehlercode STATUS _ INFO LENGTH _ MISMATCH _ fehl, und der Parameter ReturnLength wird auf die erforderliche Puffergröße festgelegt.
-
PS_PROTECTION
-
Wenn der ProcessInformationClass-Parameter ProcessProtectionInformation ist, sollte der Puffer, auf den der ProcessInformation-Parameter zeigt, groß genug sein, um eine einzelne PS_PROTECTION Struktur mit folgendem Layout zu speichern:
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 Signierer für den geschützten Prozess:
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 zeigt, in Bytes.
-
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, entspricht dies der Größe der Informationen, die in den Puffer geschrieben wurden, auf den der ProcessInformation-Parameter zeigt. Wenn der Puffer jedoch zu klein war, ist dies die Mindestgröße des Puffers, der zum erfolgreichen Empfangen der Informationen benötigt wird.
Rückgabewert
Gibt einen NTSTATUS-Erfolgs- oder Fehlercode zurück.
Die Formen und die Bedeutung von NTSTATUS-Fehlercodes sind in der im DDK verfügbaren Headerdatei "Ntstatus.h" aufgeführt und in der DDK-Dokumentation unter Kernel-Mode Treiberarchitektur/Entwurfshandbuch/Treiberprogrammierungstechniken/Protokollierungsfehler beschrieben.
Bemerkungen
Die ZwQueryInformationProcess-Funktion und die zurückgegebenen Strukturen sind intern für das Betriebssystem und können von einer Version von Windows in eine andere geändert werden. Um die Kompatibilität Ihrer Anwendung aufrechtzuerhalten, ist es besser, stattdessen öffentliche Funktionen zu verwenden, die in der Beschreibung des ProcessInformationClass-Parameters erwähnt werden.
Wenn Sie ZwQueryInformationProcess verwenden, greifen Sie über dynamisches Verknüpfenzur Laufzeit auf die Funktion 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.
Dieser Funktion ist keine Importbibliothek zugeordnet. Sie müssen die Funktionen LoadLibrary und GetProcAddress verwenden, um dynamisch mit Ntdll.dll zu verknüpfen.
Requirements (Anforderungen)
| Anforderung | Wert |
|---|---|
| Unterstützte Mindestversion (Client) |
Windows [Nur XP-Desktop-Apps] |
| Unterstützte Mindestversion (Server) |
Windows Nur Server [ 2003-Desktop-Apps] |
| DLL |
|