Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
La rutina de psImpersonateClient hace que un subproceso de servidor suplantar a un cliente.
Sintaxis
NTSTATUS PsImpersonateClient(
[in, out] PETHREAD Thread,
[in] PACCESS_TOKEN Token,
[in] BOOLEAN CopyOnOpen,
[in] BOOLEAN EffectiveOnly,
[in] SECURITY_IMPERSONATION_LEVEL ImpersonationLevel
);
Parámetros
[in, out] Thread
Puntero al subproceso del servidor que se va a suplantar al cliente.
[in] Token
Puntero al token que se va a asignar como token de suplantación. Este token puede ser un token principal o un token de suplantación. Establezca en NULL para finalizar la suplantación.
[in] CopyOnOpen
Especifica si el token se puede abrir directamente. Establézcalo en TRUE para especificar que el token no se puede abrir directamente. En este caso, el token debe duplicarse y el token duplicado usado en su lugar. Establézcalo en false para permitir que el token se abra directamente.
[in] EffectiveOnly
Establézcalo en FALSE para permitir que el servidor habilite grupos y privilegios que están deshabilitados actualmente en el contexto de seguridad del cliente, TRUE de lo contrario.
[in] ImpersonationLevel
Valor de SECURITY_IMPERSONATION_LEVEL que especifica el nivel de suplantación en el que el servidor tiene que acceder al token.
Valor devuelto
psImpersonateClient devuelve STATUS_SUCCESS o un valor NTSTATUS adecuado, como el siguiente:
Código devuelto | Descripción |
---|---|
|
No era posible suplantar a un cliente debido a restricciones de trabajo. |
|
No había memoria suficiente para completar la operación. |
Observaciones
PsImpersonateClient hace que el subproceso de servidor especificado suplanta al cliente especificado.
El subproceso de servidor ya podría suplantar a un cliente cuando se llama a psImpersonateClient. Si este es el caso, se disminuye el recuento de referencias en el token que representa ese cliente. Para conservar este token para su uso posterior, los controladores deben llamar a PsReferenceImpersonationToken antes de llamar a PsImpersonateClient y guardar el puntero devuelto por PsReferenceImpersonationToken.
Para finalizar la nueva suplantación y devolver el subproceso de servidor a la suplantación anterior, llame a PsImpersonateClient de nuevo, pasando el puntero guardado para el parámetro token de. Para finalizar todas las suplantaciones, llame a la rutina PsRevertToSelf.
De lo contrario, para finalizar la suplantación y devolver el subproceso del servidor a su contexto de seguridad original (es decir, el representado por su token principal), llame a PsImpersonateClient de nuevo, pasando un puntero de NULL para el parámetro token de.
La rutina de psImpersonateClient de puede no devolver correctamente el subproceso del servidor a la suplantación anterior si el subproceso ya está suplantando o hay restricciones de trabajo.
La rutina garantiza si la suplantación de cliente puede producirse comprobando varias condiciones, incluidas las siguientes:
- El token pasado por el autor de la llamada no tiene un identificador de autenticación anónimo.
- El token del proceso al que se hace referencia desde el subproceso del servidor y el token especificado tienen identificadores de seguridad iguales (SID)
- Ninguno de los tokens está restringido
Si no se cumple ninguna de las condiciones, la rutina realiza una copia del token existente pasado a la llamada y asigna el token recién copiado como token de suplantación, aunque con un nivel limitado de suplantación de seguridad; es decir, el subproceso del servidor solo puede obtener información sobre el cliente. Si no es posible realizar la copia de tokens, se produce un error en la rutina con un código NTSTATUS.
Es extremadamente seguro aumentar el estado de privilegio de un subproceso de usuario que no es de confianza (tome el subproceso de un usuario y suplanta localSystem, por ejemplo). Si se ha generado un subproceso de usuario que no es de confianza, el usuario podría tomar el token de subproceso después de haber sido elevado y subvertir la seguridad de todo el sistema.
En los casos en los que se requiere un estado de privilegio mayor, la tarea se debe enviar a una cola de trabajo donde la tarea se puede controlar de forma segura mediante el subproceso de trabajo del sistema . De esta manera no es necesaria ninguna suplantación.
La rutina SeImpersonateClientEx se puede usar para hacer que un subproceso suplantar a un usuario.
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.
Requisitos
Requisito | Valor |
---|---|
cliente mínimo admitido | Windows XP |
de la plataforma de destino de | Universal |
encabezado de | ntifs.h (incluya Ntifs.h) |
biblioteca de | NtosKrnl.lib |
DLL de | NtosKrnl.exe |
irQL | PASSIVE_LEVEL |
reglas de cumplimiento de DDI | HwStorPortProhibitedDIs(storport), PowerIrpDDis(wdm) |