SepVerifyDesktopAppPolicyOverrideCaller
char __fastcall SepVerifyDesktopAppPolicyOverrideCaller(VOID *pToken){
bool v2;
INT8 v3;
int v4;
__int64 v5;
int v6;
__int64 v7;
signed __int64 v8;
signed __int64 v9;
_TOKEN_TYPE TokenType[2];
__int64 v12;
size_t v13;
size_t String2;
UNICODE_STRING String2_8;
UNICODE_STRING String1_8;
_SECURITY_IMPERSONATION_LEVEL ImpersonationLevel[4];
__int16 v18[128];
__int16 v19[128];
v12 = 0i64;
TokenType[1] = 0;
String2 = 256i64;
v13 = 256i64;
v2 = 0;
LOBYTE(TokenType[0]) = 0;
String2_8 = 0i64;
v3 = *((_BYTE *)KeGetCurrentThread() + 562);
String1_8 = 0i64;
if( SeSinglePrivilegeCheck(*(_QWORD *)&SeTcbPrivilege, v3) )
return 1;
RtlQueryPackageClaims((__int64)pToken, (wchar_t *)v18, &v13, 0i64, 0i64, 0i64, 0i64, 0i64);
if( v4 >= 0 )
{
v5 = (__int64)PsReferenceEffectiveToken(
(_ETHREAD *)KeGetCurrentThread(),
&TokenType[1],
(UINT8 *)TokenType,
ImpersonationLevel,
0i64);
RtlQueryPackageClaims(v5, (wchar_t *)v19, &String2, 0i64, 0i64, 0i64, &v12, 0i64);
if( v6 >= 0 && (v12 & 4) != 0 )
{
String1_8.Length = v13 - 2;
String1_8.MaximumLength = v13 - 2;
String1_8.Buffer = (wchar_t *)v18;
String2_8.Length = String2 - 2;
String2_8.MaximumLength = String2 - 2;
String2_8.Buffer = (wchar_t *)v19;
v2 = (unsigned int)RtlCompareUnicodeString(&String1_8, &String2_8, 0) == 0;
}
if( v5 )
{
if( TokenType[1] == TokenPrimary )
{
v7 = *((_QWORD *)KeGetCurrentThread() + 23);
_m_prefetchw((const void *)(v7 + 1208));
v8 = *(_QWORD *)(v7 + 1208);
while( (v5 ^ (unsigned __int64)v8) < 0xF )
{
v9 = v8;
v8 = _InterlockedCompareExchange64((volatile signed __int64 *)(v7 + 1208), v8 + 1, v8);
if( v9 == v8 )
return v2;
}
HalPutDmaAdapter((PADAPTER_OBJECT)v5);
}
else
{
ObfDereferenceObjectWithTag((PVOID)v5, 0x746C6644ui64);
}
}
}
return v2;
}Referenced by:
No references.