RtlpIsAppContainer
NTSTATUS __stdcall RtlpIsAppContainer(VOID *a1, BOOL *a2){
int v3;
INT64 TokenType;
VOID *TokenInformation;
VOID *AccessToken;
void *TokenHandle;
_OBJECT_ATTRIBUTES ObjectAttributes;
__int64 v10;
int v11;
LODWORD(TokenInformation) = 0;
TokenHandle = 0i64;
AccessToken = 0i64;
v10 = 0i64;
v11 = 0;
*a2 = 0;
memset(&ObjectAttributes, 0, sizeof(ObjectAttributes));
if( a1 )
{
LABEL_7:
v3 = SeQueryInformationToken(a1, TokenIsAppContainer, &TokenInformation);
if( v3 >= 0 )
*a2 = (_DWORD)TokenInformation != 0;
goto LABEL_9;
}
v3 = ZwOpenThreadTokenEx(0xFFFFFFFFFFFFFFFEui64, 8ui64, 1, 512i64, (UINT64)&AccessToken);
if( v3 == -1073741700 )
{
v3 = ZwOpenProcessTokenEx(0xFFFFFFFFFFFFFFFFui64, 10i64, 512i64, (UINT64)&TokenHandle);
if( v3 < 0 )
goto LABEL_9;
ObjectAttributes.RootDirectory = 0i64;
ObjectAttributes.ObjectName = 0i64;
ObjectAttributes.SecurityDescriptor = 0i64;
ObjectAttributes.SecurityQualityOfService = &v10;
LODWORD(TokenType) = 2;
ObjectAttributes.Length = 48;
ObjectAttributes.Attributes = 512;
v10 = 0x20000000Ci64;
LOWORD(v11) = 1;
v3 = ZwDuplicateToken((UINT64)TokenHandle, 8i64, (INT64)&ObjectAttributes, 0, TokenType, (UINT64)&AccessToken);
ZwClose((_HANDLE)TokenHandle);
}
if( v3 >= 0 )
{
a1 = AccessToken;
goto LABEL_7;
}
LABEL_9:
if( AccessToken )
ZwClose((_HANDLE)AccessToken);
return v3;
}Referenced by:
RtlpCapabilityCheckSystemCapability