Share via


Función ZwQueryInformationProcess

[ZwQueryInformationProcess puede modificarse o no estar disponible en versiones futuras de Windows. Las aplicaciones deben usar las funciones alternativas enumeradas en este tema.

Recupera información sobre el proceso especificado.

Sintaxis

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

Parámetros

ProcessHandle [in]

Identificador del proceso para el que se va a recuperar la información.

ProcessInformationClass [in]

Tipo de información de proceso que se va a recuperar. Este parámetro puede ser uno de los siguientes valores de la enumeración PROCESSINFOCLASS .

Value Significado
ProcessBasicInformation
0
Recupera un puntero a una estructura PEB que se puede usar para determinar si se está depurando el proceso especificado y un valor único utilizado por el sistema para identificar el proceso especificado.
Es mejor usar las funciones CheckRemoteDebuggerPresent y GetProcessId para obtener esta información.
ProcessDebugPort
7
Recupera un valor de DWORD_PTR que es el número de puerto del depurador para el proceso. Un valor distinto de cero indica que el proceso se está ejecutando bajo el control de un depurador de anillo 3.
Es mejor usar la función CheckRemoteDebuggerPresent o IsDebuggerPresent .
ProcessWow64Information
26
Determina si el proceso se ejecuta en el entorno WOW64 (WOW64 es el emulador x86 que permite que las aplicaciones basadas en Win32 se ejecuten en Windows de 64 bits).
Es mejor usar la función IsWow64Process para obtener esta información.
ProcessImageFileName
27
Recupera un valor de UNICODE_STRING que contiene el nombre del archivo de imagen para el proceso.
ProcessBreakOnTermination
29
Recupera un valor de ULONG que indica si el proceso se considera crítico.
Nota: Este valor se puede usar a partir de Windows XP con SP3. A partir de Windows 8.1, se debe usar IsProcessCritical en su lugar.
ProcessProtectionInformation
61
Recupera un valor BYTE que indica el tipo de proceso protegido y el firmante del proceso protegido.

 

ProcessInformation [out]

Puntero a un búfer proporcionado por la aplicación que realiza la llamada en la que la función escribe la información solicitada. El tamaño de la información escrita varía según el valor del parámetro ProcessInformationClass :

PROCESS_BASIC_INFORMATION

Cuando el parámetro ProcessInformationClass es ProcessBasicInformation, el búfer al que apunta el parámetro ProcessInformation debe ser lo suficientemente grande como para contener una única estructura de PROCESS_BASIC_INFORMATION que tenga el siguiente diseño:

typedef struct _PROCESS_BASIC_INFORMATION {
    NTSTATUS ExitStatus;
    PPEB PebBaseAddress;
    ULONG_PTR AffinityMask;
    KPRIORITY BasePriority;
    ULONG_PTR UniqueProcessId;
    ULONG_PTR InheritedFromUniqueProcessId;
} PROCESS_BASIC_INFORMATION;
Campo Significado
ExitStatus Contiene el mismo valor que GetExitCodeProcess devolvería. Sin embargo, el uso de GetExitCodeProcess es preferible para mayor claridad y seguridad.
PebBaseAddress Apunta a una estructura PEB .
AffinityMask Se puede convertir a un DWORD y contiene el mismo valor que GetProcessAffinityMask devolvería para el lpProcessAffinityMask parámetro .
BasePriority Contiene la prioridad del proceso como se describe en Programación de prioridades.
UniqueProcessId Se puede convertir a un DWORD y contiene un identificador único para este proceso. Es mejor usar la función GetProcessId para recuperar esta información.
InheritedFromUniqueProcessId Se puede convertir a un DWORD y contiene un identificador único para el proceso primario.

ULONG_PTR

Cuando el parámetro ProcessInformationClass es ProcessWow64Information, el búfer al que apunta el parámetro ProcessInformation debe ser lo suficientemente grande como para contener un ULONG_PTR. Si este valor es distinto de cero, el proceso se ejecuta en un entorno WOW64; de lo contrario, si el valor es igual a cero, el proceso no se ejecuta en un entorno WOW64.

Es mejor usar la función IsWow64Process para determinar si un proceso se ejecuta en el entorno WOW64.

UNICODE_STRING

Cuando el parámetro ProcessInformationClass es ProcessImageFileName, el búfer al que apunta el parámetro ProcessInformation debe ser lo suficientemente grande como para contener una estructura de UNICODE_STRING , así como la propia cadena. La cadena almacenada en el miembro Buffer es el nombre del archivo de imagen.

Si el búfer es demasiado pequeño, se produce un error en la función con el código de error STATUS_INFO_LENGTH_MISMATCH y el parámetro ReturnLength se establece en el tamaño de búfer necesario.

PS_PROTECTION

Cuando el parámetro ProcessInformationClass es ProcessProtectionInformation, el búfer al que apunta el parámetro ProcessInformation debe ser lo suficientemente grande como para contener una única estructura de PS_PROTECTION que tenga el siguiente diseño:

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

Los primeros 3 bits contienen el tipo de proceso protegido:

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

Los 4 bits principales contienen el firmante de proceso protegido:

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

ProcessInformationLength [in]

Tamaño del búfer al que apunta el parámetro ProcessInformation , en bytes.

ReturnLength [out, opcional]

Puntero a una variable en la que la función devuelve el tamaño de la información solicitada. Si la función se realizó correctamente, este es el tamaño de la información escrita en el búfer al que apunta el parámetro ProcessInformation , pero si el búfer era demasiado pequeño, este es el tamaño mínimo del búfer necesario para recibir la información correctamente.

Valor devuelto

Devuelve un código de error o correcto de NTSTATUS.

Los formularios y la importancia de los códigos de error NTSTATUS se enumeran en el archivo de encabezado Ntstatus.h disponible en el DDK y se describen en la documentación de DDK en Kernel-Mode Guía de diseño/ Guía de diseño del controlador / Técnicas de programación de controladores / Errores de registro.

Observaciones

La función ZwQueryInformationProcess y las estructuras que devuelve son internas para el sistema operativo y están sujetas a cambios de una versión de Windows a otra. Para mantener la compatibilidad de la aplicación, es mejor usar funciones públicas mencionadas en la descripción del parámetro ProcessInformationClass en su lugar.

Si usa ZwQueryInformationProcess, acceda a la función mediante la vinculación dinámica en tiempo de ejecución. Esto ofrece al código la oportunidad de responder correctamente si la función se ha cambiado o quitado del sistema operativo. Sin embargo, es posible que los cambios de firma no sean detectables.

Esta función no tiene ninguna biblioteca de importación asociada. Debe usar las funciones LoadLibrary y GetProcAddress para vincular dinámicamente a Ntdll.dll.

Requisitos

Requisito Value
Cliente mínimo compatible
Windows XP [solo aplicaciones de escritorio]
Servidor mínimo compatible
Windows Server 2003 [solo aplicaciones de escritorio]
Archivo DLL
Ntdll.dll

Consulte también

CheckRemoteDebuggerPresent

GetProcessId

IsDebuggerPresent

IsWow64Process