RtlpCapabilityCheckSystemCapability
INT64 __stdcall RtlpCapabilityCheckSystemCapability(HANDLE ExistingTokenHandle, PCUNICODE_STRING Source){
_BYTE *v2;
_BYTE *v4;
int PolicyValueForSystemCapability;
int IsAppContainer;
UINT64 v7;
UINT64 v8;
INT64 IsMember;
INT64 v11;
UNICODE_STRING String1;
char Sid[16];
HIDWORD(IsMember) = 0;
LOWORD(v11) = 1280;
LOWORD(IsMember) = 0;
v4 = v2;
String1 = 0i64;
PolicyValueForSystemCapability = RtlpGetPolicyValueForSystemCapability(Source, &String1);
IsAppContainer = PolicyValueForSystemCapability;
if( PolicyValueForSystemCapability == -1073741772 )
{
IsAppContainer = 0;
}
else
{
*v4 = 0;
if( PolicyValueForSystemCapability >= 0 )
{
if( (unsigned int)RtlCompareUnicodeString(&String1, &stru_140009658, 0) )
{
if( (unsigned int)RtlCompareUnicodeString(&String1, &stru_140009638, 0) )
{
IsAppContainer = -1073741823;
goto LABEL_14;
}
LOBYTE(v8) = 1;
RtlInitializeSid(Sid, (SID_IDENTIFIER_AUTHORITY *)((char *)&IsMember + 4), v8);
*RtlSubAuthoritySid(Sid, 0i64) = 4;
}
else
{
LOBYTE(v7) = 2;
RtlInitializeSid(Sid, (SID_IDENTIFIER_AUTHORITY *)((char *)&IsMember + 4), v7);
*RtlSubAuthoritySid(Sid, 0i64) = 32;
*RtlSubAuthoritySid(Sid, 1ui64) = 583;
}
IsAppContainer = RtlCheckTokenMembershipEx(
ExistingTokenHandle,
Sid,
2ui64,
(UINT8 *)&IsMember,
IsMember,
v11,
*(INT64 *)&String1.Length,
(INT64)String1.Buffer);
if( IsAppContainer >= 0 )
{
if( (_BYTE)IsMember )
{
IsAppContainer = RtlpIsAppContainer(ExistingTokenHandle, (BOOL *)((char *)&IsMember + 1));
if( IsAppContainer >= 0 )
{
if( BYTE1(IsMember) )
*v4 = 1;
}
}
}
}
}
LABEL_14:
RtlFreeAnsiString(&String1);
return(unsigned int)IsAppContainer;
}Referenced by:
RtlCapabilityCheck