RtlpCapabilityCheckSystemCapability
NTSTATUS __stdcall RtlpCapabilityCheckSystemCapability(_HANDLE ExistingTokenHandle, PCUNICODE_STRING Source){
_BYTE *v2;
VOID *v3;
_BYTE *v4;
NTSTATUS PolicyValueForSystemCapability;
int IsAppContainer;
_DWORD *v7;
_DWORD *v8;
_DWORD *v9;
UINT8 IsMember;
BOOL v12;
_SID_IDENTIFIER_AUTHORITY IdentifierAuthority;
_UNICODE_STRING UnicodeString;
char Sid[16];
*(_DWORD *)IdentifierAuthority.Value = 0;
v3 = *(VOID **)&ExistingTokenHandle;
*(_WORD *)&IdentifierAuthority.Value[4] = 1280;
IsMember = 0;
v12 = 0;
v4 = v2;
UnicodeString = 0i64;
PolicyValueForSystemCapability = RtlpGetPolicyValueForSystemCapability(Source, &UnicodeString);
IsAppContainer = PolicyValueForSystemCapability;
if( PolicyValueForSystemCapability == -1073741772 )
{
IsAppContainer = 0;
}
else
{
*v4 = 0;
if( PolicyValueForSystemCapability >= 0 )
{
if( RtlCompareUnicodeString(&UnicodeString, &stru_140009638 + 2, 0) )
{
if( RtlCompareUnicodeString(&UnicodeString, &stru_140009638, 0) )
{
IsAppContainer = -1073741823;
goto LABEL_14;
}
RtlInitializeSid(Sid, &IdentifierAuthority, 1u);
LODWORD(v9) = RtlSubAuthoritySid((INT64)Sid, 0i64);
*v9 = 4;
}
else
{
RtlInitializeSid(Sid, &IdentifierAuthority, 2u);
LODWORD(v7) = RtlSubAuthoritySid((INT64)Sid, 0i64);
*v7 = 32;
LODWORD(v8) = RtlSubAuthoritySid((INT64)Sid, 1ui64);
*v8 = 583;
}
IsAppContainer = RtlCheckTokenMembershipEx(v3, Sid, 2ui64, &IsMember);
if( IsAppContainer >= 0 )
{
if( IsMember )
{
IsAppContainer = RtlpIsAppContainer(v3, &v12);
if( IsAppContainer >= 0 )
{
if( v12 )
*v4 = 1;
}
}
}
}
}
LABEL_14:
RtlFreeAnsiString(&UnicodeString);
return IsAppContainer;
}Referenced by:
RtlCapabilityCheck