Partager via


Fonction ZwQueryInformationProcess

[ZwQueryInformationProcess peut être modifié ou indisponible dans les versions futures de Windows. Les applications doivent utiliser les autres fonctions répertoriées dans cette rubrique.]

Récupère des informations sur le processus spécifié.

Syntaxe

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

Paramètres

ProcessHandle [in]

Handle du processus pour lequel les informations doivent être récupérées.

ProcessInformationClass [in]

Type d’informations de processus à récupérer. Ce paramètre peut être l’une des valeurs suivantes de l’énumération PROCESSINFOCLASS .

Valeur Signification
ProcessBasicInformation
0
Récupère un pointeur vers une structure PEB qui peut être utilisé pour déterminer si le processus spécifié est en cours de débogage et une valeur unique utilisée par le système pour identifier le processus spécifié.
Il est préférable d’utiliser les fonctions CheckRemoteDebuggerPresent et GetProcessId pour obtenir ces informations.
ProcessDebugPort
7
Récupère une valeur DWORD_PTR qui est le numéro de port du débogueur pour le processus. Une valeur différente de zéro indique que le processus est en cours d’exécution sous le contrôle d’un débogueur ring 3.
Il est préférable d’utiliser la fonction CheckRemoteDebuggerPresent ou IsDebuggerPresent .
ProcessWow64Information
26
Détermine si le processus s’exécute dans l’environnement WOW64 (WOW64 est l’émulateur x86 qui permet aux applications win32 de s’exécuter sur Windows 64 bits).
Il est préférable d’utiliser la fonction IsWow64Process pour obtenir ces informations.
ProcessImageFileName
27
Récupère une valeur UNICODE_STRING contenant le nom du fichier image pour le processus.
ProcessBreakOnTermination
29
Récupère une valeur ULONG indiquant si le processus est considéré comme critique.
Note: Cette valeur peut être utilisée à partir de Windows XP avec SP3. À partir de Windows 8.1, IsProcessCritical doit être utilisé à la place.
ProcessProtectionInformation
61
Récupère une valeur BYTE indiquant le type de processus protégé et le signataire du processus protégé.

 

ProcessInformation [out]

Pointeur vers une mémoire tampon fournie par l’application appelante dans laquelle la fonction écrit les informations demandées. La taille des informations écrites varie en fonction de la valeur du paramètre ProcessInformationClass :

PROCESS_BASIC_INFORMATION

Lorsque le paramètre ProcessInformationClass est ProcessBasicInformation, la mémoire tampon pointée par le paramètre ProcessInformation doit être suffisamment grande pour contenir une structure PROCESS_BASIC_INFORMATION unique ayant la disposition suivante :

typedef struct _PROCESS_BASIC_INFORMATION {
    NTSTATUS ExitStatus;
    PPEB PebBaseAddress;
    ULONG_PTR AffinityMask;
    KPRIORITY BasePriority;
    ULONG_PTR UniqueProcessId;
    ULONG_PTR InheritedFromUniqueProcessId;
} PROCESS_BASIC_INFORMATION;
Champ Signification
ExitStatus Contient la même valeur que celle renvoyée par GetExitCodeProcess . Toutefois, l’utilisation de GetExitCodeProcess est préférable pour plus de clarté et de sécurité.
PebBaseAddress Pointe vers une structure PEB .
AffinityMask Peut être converti en DWORD et contient la même valeur que GetProcessAffinityMask retournerait pour le lpProcessAffinityMask paramètre.
BasePriority Contient la priorité du processus, comme décrit dans Priorités de planification.
UniqueProcessId Peut être converti en DWORD et contient un identificateur unique pour ce processus. Il est préférable d’utiliser la fonction GetProcessId pour récupérer ces informations.
InheritedFromUniqueProcessId Peut être converti en DWORD et contient un identificateur unique pour le processus parent.

ULONG_PTR

Lorsque le paramètre ProcessInformationClass est ProcessWow64Information, la mémoire tampon pointée par le paramètre ProcessInformation doit être suffisamment grande pour contenir une ULONG_PTR. Si cette valeur est différente de zéro, le processus s’exécute dans un environnement WOW64 ; sinon, si la valeur est égale à zéro, le processus n’est pas en cours d’exécution dans un environnement WOW64.

Il est préférable d’utiliser la fonction IsWow64Process pour déterminer si un processus est en cours d’exécution dans l’environnement WOW64.

UNICODE_STRING

Lorsque le paramètre ProcessInformationClass est ProcessImageFileName, la mémoire tampon pointée par le paramètre ProcessInformation doit être suffisamment grande pour contenir une structure UNICODE_STRING ainsi que la chaîne elle-même. La chaîne stockée dans le membre Buffer est le nom du fichier image.

Si la mémoire tampon est trop petite, la fonction échoue avec le code d’erreur STATUS_INFO_LENGTH_MISMATCH et le paramètre ReturnLength est défini sur la taille de mémoire tampon requise.

PS_PROTECTION

Lorsque le paramètre ProcessInformationClass est ProcessProtectionInformation, la mémoire tampon pointée par le paramètre ProcessInformation doit être suffisamment grande pour contenir une structure PS_PROTECTION unique ayant la disposition suivante :

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

Les 3 premiers bits contiennent le type de processus protégé :

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

Les 4 premiers bits contiennent le signataire du processus protégé :

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

ProcessInformationLength [in]

Taille de la mémoire tampon pointée vers le paramètre ProcessInformation , en octets.

ReturnLength [out, facultatif]

Pointeur vers une variable dans laquelle la fonction retourne la taille des informations demandées. Si la fonction a réussi, il s’agit de la taille des informations écrites dans la mémoire tampon pointée par le paramètre ProcessInformation , mais si la mémoire tampon était trop petite, il s’agit de la taille minimale de la mémoire tampon nécessaire pour recevoir les informations correctement.

Valeur retournée

Retourne un code de réussite ou d’erreur NTSTATUS.

Les formes et l’importance des codes d’erreur NTSTATUS sont répertoriés dans le fichier d’en-tête Ntstatus.h disponible dans le DDK et sont décrits dans la documentation DDK sous Kernel-Mode Architecture du pilote / Guide de conception / Techniques de programmation du pilote / Erreurs de journalisation.

Remarques

La fonction ZwQueryInformationProcess et les structures qu’elle retourne sont internes au système d’exploitation et peuvent être modifiées d’une version de Windows à une autre. Pour maintenir la compatibilité de votre application, il est préférable d’utiliser plutôt des fonctions publiques mentionnées dans la description du paramètre ProcessInformationClass .

Si vous utilisez ZwQueryInformationProcess, accédez à la fonction via une liaison dynamique au moment de l’exécution. Cela permet à votre code de répondre correctement si la fonction a été modifiée ou supprimée du système d’exploitation. Toutefois, les modifications de signature peuvent ne pas être détectables.

Cette fonction n’a pas de bibliothèque d’importation associée. Vous devez utiliser les fonctions LoadLibrary et GetProcAddress pour établir un lien dynamique vers Ntdll.dll.

Configuration requise

Condition requise Valeur
Client minimal pris en charge
Windows XP [applications de bureau uniquement]
Serveur minimal pris en charge
Windows Server 2003 [applications de bureau uniquement]
DLL
Ntdll.dll

Voir aussi

CheckRemoteDebuggerPresent

GetProcessId

IsDebuggerPresent

IsWow64Process