RtlpIsAppContainer

INT64 __fastcall RtlpIsAppContainer(VOID *a1, BOOL *a2){
  int v3; 
  PVOID TokenInformation; 
  PACCESS_TOKEN Token; 
  void *TokenHandle; 
  struct _OBJECT_ATTRIBUTES ObjectAttributes; 
  __int64 v9; 
  int v10; 
  LODWORD(TokenInformation) = 0;
  TokenHandle = 0i64;
  Token = 0i64;
  v9 = 0i64;
  v10 = 0;
  *(_BYTE *)a2 = 0;
  memset(&ObjectAttributes, 0, sizeof(ObjectAttributes));
  if( a1 )
  {
LABEL_7:
    v3 = SeQueryInformationToken(a1, TokenIsAppContainer, &TokenInformation);
    if( v3 >= 0 )
      *(_BYTE *)a2 = (_DWORD)TokenInformation != 0;
    goto LABEL_9;
  }
  v3 = ZwOpenThreadTokenEx((PVOID)0xFFFFFFFFFFFFFFFEi64, 8ui64, 1u, 0x200ui64, &Token);
  if( v3 == -1073741700 )
  {
    v3 = ZwOpenProcessTokenEx((PVOID)0xFFFFFFFFFFFFFFFFi64, 0xAui64, 0x200ui64, &TokenHandle);
    if( v3 < 0 )
      goto LABEL_9;
    ObjectAttributes.RootDirectory = 0i64;
    ObjectAttributes.ObjectName = 0i64;
    ObjectAttributes.SecurityDescriptor = 0i64;
    ObjectAttributes.SecurityQualityOfService = &v9;
    ObjectAttributes.Length = 48;
    ObjectAttributes.Attributes = 512;
    v9 = 0x20000000Ci64;
    LOWORD(v10) = 1;
    v3 = ZwDuplicateToken(TokenHandle, 8ui64, &ObjectAttributes, 0, TokenImpersonation, &Token);
    ZwClose(TokenHandle);
  }
  if( v3 >= 0 )
  {
    a1 = Token;
    goto LABEL_7;
  }
LABEL_9:
  if( Token )
    ZwClose(Token);
  return(unsigned int)v3;
}

Referenced by:

RtlpCapabilityCheckSystemCapability