PsAssignImpersonationToken
INT64 __stdcall PsAssignImpersonationToken(_ETHREAD *Thread, PVOID Token){
_ETHREAD *CurrentThread;
unsigned int v4;
INT64 result;
KPROCESSOR_MODE v6;
struct _DMA_ADAPTER *v7;
PVOID Object;
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
if( !Token )
{
PsImpersonateClient(Thread, 0i64, 0, 0, SecurityImpersonation);
return 0;
}
v6 = *((_BYTE *)CurrentThread + 562);
Object = 0i64;
LODWORD(result) = ObReferenceObjectByHandle(Token, 4u, (POBJECT_TYPE)SeTokenObjectType, v6, &Object, 0i64);
if( (int)result >= 0 )
{
v7 = (struct _DMA_ADAPTER *)Object;
if( *((_DWORD *)Object + 48) != 2 )
{
HalPutDmaAdapter((PADAPTER_OBJECT)Object);
return 3221225640i64;
}
v4 = PsImpersonateClient(Thread, Object, 0, 0, (_SECURITY_IMPERSONATION_LEVEL)*((_DWORD *)Object + 49));
HalPutDmaAdapter(v7);
return v4;
}
return result;
}Referenced by:
NtSetInformationThread