SepGetAnonymousToken
INT64 __fastcall SepGetAnonymousToken(INT64 a1, PADAPTER_OBJECT *a2){
int v4;
_AUTHZBASEP_SECURITY_ATTRIBUTES_INFORMATION *v5;
struct _DMA_ADAPTER *v6;
_OBJECT_ATTRIBUTES ObjectAttributes;
PADAPTER_OBJECT DmaAdapter;
DmaAdapter = 0i64;
memset(&ObjectAttributes.Length + 1, 0, 44);
ObjectAttributes.Length = 48;
v4 = SepDuplicateToken(
(_TOKEN *)SeAnonymousLogonTokenNoEveryone,
&ObjectAttributes,
1u,
TokenImpersonation,
SecurityImpersonation,
0,
1u,
(_TOKEN **)&DmaAdapter);
if( v4 >= 0 )
{
if( a1 )
{
v4 = SepSetTokenPackage((INT64)DmaAdapter, *(UINT8 **)(a1 + 784));
if( v4 < 0
|| (v4 = SepSetTokenCapabilities(
(_TOKEN *)DmaAdapter,
*(VOID **)(a1 + 784),
*(_SID_AND_ATTRIBUTES **)(a1 + 792),
*(unsigned int *)(a1 + 800)),
v4 < 0)
|| (SepSetTokenSessionById((INT64)DmaAdapter, *(unsigned int *)(a1 + 120), 0, 0i64, 0i64),
LODWORD(DmaAdapter[7].DmaOperations) = *(_DWORD *)(a1 + 120),
v4 = SepSetTokenLowboxNumber((_TOKEN *)DmaAdapter, *(VOID **)(a1 + 784)),
v4 < 0)
|| (v5 = *(_AUTHZBASEP_SECURITY_ATTRIBUTES_INFORMATION **)(a1 + 776)) != 0i64
&& v5->SecurityAttributeCount
&& (v4 = AuthzBasepDuplicateSecurityAttributes(
v5,
(_AUTHZBASEP_SECURITY_ATTRIBUTES_INFORMATION *)DmaAdapter[48].DmaOperations,
0i64),
v4 < 0) )
{
v6 = DmaAdapter;
goto LABEL_11;
}
DmaAdapter[4].DmaOperations = (_DMA_OPERATIONS *)((unsigned __int64)DmaAdapter[4].DmaOperations & 0x200800000i64);
*(_QWORD *)&DmaAdapter[5].Version &= 0x200800000ui64;
*(_QWORD *)&DmaAdapter[4].Version &= 0x200800000ui64;
LODWORD(DmaAdapter[12].DmaOperations) &= ~0x2000u;
LODWORD(DmaAdapter[12].DmaOperations) |= 0x4000u;
LODWORD(DmaAdapter[12].DmaOperations) |= *(_DWORD *)(a1 + 200) & 0x380000;
}
v6 = DmaAdapter;
*a2 = DmaAdapter;
if( v4 < 0 )
LABEL_11:
HalPutDmaAdapter(v6);
}
return(unsigned int)v4;
}Referenced by:
NtImpersonateAnonymousToken
SepCopyAnonymousTokenAndSetSilo
SepCreateClientSecurityEx