Función NtOpenProcessTokenEx (ntifs.h)

La rutina NtOpenProcessTokenEx abre el token de acceso asociado a un proceso y devuelve un identificador que se puede usar para acceder a ese token.

Sintaxis

__kernel_entry NTSYSCALLAPI NTSTATUS NtOpenProcessTokenEx(
  [in]  HANDLE      ProcessHandle,
  [in]  ACCESS_MASK DesiredAccess,
  [in]  ULONG       HandleAttributes,
  [out] PHANDLE     TokenHandle
);

Parámetros

[in] ProcessHandle

Controle el proceso cuyo token de acceso se va a abrir. El identificador debe tener acceso PROCESS_QUERY_INFORMATION. Use la macro NtCurrentProcess , definida en Ntddk.h, para especificar el proceso actual.

[in] DesiredAccess

ACCESS_MASK estructura que especifica los tipos de acceso solicitados al token de acceso. Estos tipos de acceso solicitados se comparan con la lista de control de acceso discrecional (DACL) del token para determinar qué accesos se conceden o deniegan.

[in] HandleAttributes

Atributos para el identificador de token de acceso. Actualmente solo se admiten OBJ_KERNEL_HANDLE. Si el autor de la llamada no se está ejecutando en el contexto del proceso del sistema, debe especificar OBJ_KERNEL_HANDLE para este parámetro.

[out] TokenHandle

Puntero a una variable asignada por el autor de la llamada que recibe un identificador del token de acceso recién abierto.

Valor devuelto

NtOpenProcessTokenEx devuelve STATUS_SUCCESS o un estado de error adecuado. Entre los posibles códigos de estado de error se incluyen los siguientes:

Código devuelto Descripción
STATUS_ACCESS_DENIED ProcessHandle no tenía acceso PROCESS_QUERY_INFORMATION.
STATUS_INSUFFICIENT_RESOURCES No se pudo asignar un nuevo identificador de token.
STATUS_INVALID_HANDLE ProcessHandle no era un identificador válido.
STATUS_INVALID_PARAMETER Los handleAttributes especificados no incluyeron OBJ_KERNEL_HANDLE.
STATUS_OBJECT_TYPE_MISMATCH ProcessHandle no era un identificador de proceso.
STATUS_PRIVILEGE_NOT_HELD El autor de la llamada no tiene el privilegio (SeSecurityPrivilege) necesario para crear un identificador de token con el acceso especificado en el parámetro DesiredAccess .
STATUS_QUOTA_EXCEEDED La cuota de memoria del proceso no es suficiente para asignar el identificador de token.
STATUS_UNSUCCESSFUL No se pudo crear el identificador de token.

Comentarios

Cualquier identificador obtenido llamando a NtOpenProcessTokenEx debe liberarse finalmente llamando a NtClose.

Las rutinas de controlador que se ejecutan en un contexto de proceso distinto del del proceso del sistema deben establecer el atributo OBJ_KERNEL_HANDLE para el parámetro HandleAttributes de NtOpenProcessTokenEx. Esto restringe el uso del identificador devuelto por NtOpenProcessTokenEx a los procesos que se ejecutan en modo kernel. De lo contrario, el proceso puede acceder al identificador en cuyo contexto se ejecuta el controlador.

Para obtener más información sobre la seguridad y el control de acceso, consulte Modelo de seguridad de Windows para desarrolladores de controladores y la documentación sobre estos temas en Windows SDK.

En el caso de las llamadas desde controladores en modo kernel, las versiones NtXxx y ZwXxx de una rutina de Windows Native System Services pueden comportarse de forma diferente en la forma en que controlan e interpretan los parámetros de entrada. Para obtener más información sobre la relación entre las versiones NtXxx y ZwXxx de una rutina, vea Using Nt and Zw Versions of the Native System Services Routines.

Requisitos

Requisito Value
Cliente mínimo compatible Windows XP
Plataforma de destino Universal
Encabezado ntifs.h (incluya Ntifs.h)
Library NtosKrnl.lib
Archivo DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL
Reglas de cumplimiento de DDI HwStorPortProhibitedDIs, PowerIrpDDis

Consulte también

ACCESS_MASK

ACL

PsDereferencePrimaryToken

NtClose

NtOpenThreadTokenEx