PACCESS_TOKEN PsReferenceEffectiveToken( IN PETHREAD Thread, OUT PTOKEN_TYPE TokenType, OUT PBOOLEAN EffectiveOnly, OUT PSECURITY_IMPERSONATION_LEVEL ImpersonationLevel ); Routine Description: This function returns a pointer to the effective token of a thread. The effective token of a thread is the thread's impersonation token if it has one. Otherwise, it is the primary token of the thread's process. The reference count of the effective token is incremented to protect the pointer returned. If the thread is impersonating a client, then the impersonation level is also returned. Either PsDereferenceImpersonationToken() (for an impersonation token) or PsDereferencePrimaryToken() (for a primary token) must be called to decrement the token's reference count when the pointer is no longer needed. Arguments: Thread - Supplies the address of the thread whose effective token is to be referenced. TokenType - Receives the type of the effective token. If the thread is currently impersonating a client, then this will be TokenImpersonation. Othwerwise, it will be TokenPrimary. EffectiveOnly - If the token type is TokenImpersonation, then this receives the value of the client thread's Thread->Client->EffectiveOnly field. Otherwise, it is set to FALSE. ImpersonationLevel - The current value of the Thread->Client->ImpersonationLevel field for an impersonation token and is not set for a primary token. Return Value: A pointer to the specified thread's effective token.