AlpcpExposeTokenAttribute
char __fastcall AlpcpExposeTokenAttribute(__int64 a1, __int64 a2, _QWORD *a3, _DWORD *a4){
__int64 v8;
int v9;
PERESOURCE *ClientToken;
__int64 v11;
int v12;
_ETHREAD *v13;
_ETHREAD *CurrentThread;
PERESOURCE v15;
PERESOURCE *v17;
PERESOURCE v18;
PERESOURCE v19;
_SECURITY_CLIENT_CONTEXT result;
char v21;
memset((INT64)&result, 0i64);
v9 = 0;
ClientToken = 0i64;
v17 = 0i64;
LODWORD(v11) = *(_DWORD *)(a2 + 40);
if( (v11 & 0x80u) != 0i64 )
return v11;
v11 = *(_QWORD *)(a2 + 136);
if( v11 )
{
if( *(int *)(v11 + 36) < 1 )
return v11;
ClientToken = *(PERESOURCE **)(v11 + 48);
v17 = ClientToken;
v21 = 0;
goto LABEL_13;
}
v8 = *(_QWORD *)(a2 + 24);
LOBYTE(v11) = *(_DWORD *)(a1 + 416) & 6;
if( (_BYTE)v11 != 2 )
return v11;
if( !v8 )
return v11;
v12 = *(_DWORD *)(v8 + 416);
LOBYTE(v11) = v12 & 6;
if( (v12 & 6) != 4 )
return v11;
if( (v12 & 0x400) == 0 )
{
ClientToken = *(PERESOURCE **)(v8 + 80);
if( !ClientToken )
return v11;
v17 = *(PERESOURCE **)(v8 + 80);
LABEL_12:
v21 = 0;
if( v9 < 0 )
return v11;
goto LABEL_13;
}
v13 = *(_ETHREAD **)(a2 + 32);
if( !v13 )
return v11;
LODWORD(v11) = SeCreateClientSecurityEx(v13, (_SECURITY_QUALITY_OF_SERVICE *)(v8 + 260), 0, &result);
v9 = v11;
if( (int)v11 < 0 )
goto LABEL_12;
ClientToken = (PERESOURCE *)result.ClientToken;
v17 = (PERESOURCE *)result.ClientToken;
v21 = 1;
LABEL_13:
v19 = ClientToken[3];
v18 = ClientToken[2];
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
--*((_WORD *)CurrentThread + 242);
LOBYTE(v8) = 1;
ExAcquireResourceSharedLite(v17[6], v8);
v15 = v17[7];
ExReleaseResourceLite(v17[6]);
KeLeaveCriticalRegion();
if( v21 )
HalPutDmaAdapter((PADAPTER_OBJECT)result.ClientToken);
*a3 = v18;
LOBYTE(v11) = (_BYTE)v19;
a3[1] = v19;
a3[2] = v15;
*a4 |= 0x8000000u;
return v11;
}Referenced by:
AlpcpExposeAttributes