Función ZwOpenThreadTokenEx (ntifs.h)

La rutina ZwOpenThreadTokenEx abre el token de acceso asociado a un subproceso.

Sintaxis

NTSYSAPI NTSTATUS ZwOpenThreadTokenEx(
  [in]  HANDLE      ThreadHandle,
  [in]  ACCESS_MASK DesiredAccess,
  [in]  BOOLEAN     OpenAsSelf,
  [in]  ULONG       HandleAttributes,
  [out] PHANDLE     TokenHandle
);

Parámetros

[in] ThreadHandle

Identificador del subproceso cuyo token de acceso se va a abrir. El identificador debe tener acceso THREAD_QUERY_INFORMATION. Use la macro NtCurrentThread para especificar el subproceso 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é derechos de acceso se conceden o deniegan.

[in] OpenAsSelf

Valor booleano que especifica si se debe realizar la comprobación de acceso en el contexto de seguridad del subproceso que llama a ZwOpenThreadTokenEx o en el contexto de seguridad del proceso para el subproceso que realiza la llamada.

Si este parámetro es FALSE, la comprobación de acceso se realiza mediante el contexto de seguridad del subproceso que realiza la llamada. Si el subproceso suplanta a un cliente, este contexto de seguridad puede ser el de un proceso de cliente. Si este parámetro es TRUE, la comprobación de acceso se realiza mediante el contexto de seguridad del proceso para el subproceso que realiza la llamada.

[in] HandleAttributes

Atributos para el identificador creado. 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

ZwOpenThreadTokenEx 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 ThreadHandle no tenía acceso THREAD_QUERY_INFORMATION.
STATUS_CANT_OPEN_ANONYMOUS El cliente solicitó el nivel de suplantación SecurityAnonymous. Sin embargo, no se puede abrir un token anónimo. Para obtener más información, consulte SECURITY_IMPERSONATION_LEVEL.
STATUS_INVALID_HANDLE ThreadHandle no era un identificador válido.
STATUS_INVALID_PARAMETER Los handleAttributes especificados no incluyeron OBJ_KERNEL_HANDLE.
STATUS_NO_TOKEN Se ha intentado abrir un token asociado a un subproceso que no suplanta actualmente a un cliente.
STATUS_OBJECT_TYPE_MISMATCH ThreadHandle no era un identificador de subproceso.

Comentarios

ZwOpenThreadTokenEx abre el token de acceso asociado a un subproceso y devuelve un identificador para ese token.

El parámetro OpenAsSelf permite que un proceso de servidor abra el token de acceso para un proceso de cliente cuando el proceso de cliente haya especificado el nivel de suplantación SecurityIdentification para el tipo enumerado SECURITY_IMPERSONATION_LEVEL . Sin este parámetro, el proceso de llamada no puede abrir el token de acceso del cliente mediante el contexto de seguridad del cliente porque es imposible abrir objetos de nivel ejecutivo mediante el nivel de suplantación SecurityIdentification.

Cualquier identificador obtenido llamando a ZwOpenThreadTokenEx debe liberarse finalmente llamando a ZwClose.

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 ZwOpenThreadTokenEx. Esto restringe el uso del identificador devuelto por ZwOpenThreadTokenEx 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.

Nota

Si la llamada a la función ZwOpenThreadTokenEx se produce en modo de usuario, debe usar el nombre "NtOpenThreadTokenEx" en lugar de "ZwOpenThreadTokenEx".

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(storport), PowerIrpDDis(wdm)

Consulte también

<ACCESS_MASK

ACL

PsDereferencePrimaryToken

SECURITY_IMPERSONATION_LEVEL

Uso de las versiones Nt y Zw de las rutinas nativas de System Services

ZwClose

ZwOpenProcessTokenEx