SeQueryInformationToken

NTSTATUS __stdcall SeQueryInformationToken(
        VOID *AccessToken,
        _TOKEN_INFORMATION_CLASS TokenInformationClass,
        VOID **TokenInformation){
  char *v3; 
  unsigned int v7; 
  unsigned int v8; 
  NTSTATUS result; 
  _ETHREAD *CurrentThread; 
  unsigned int v11; 
  _SID_AND_ATTRIBUTES *PoolWithTag; 
  _DWORD *v13; 
  _ETHREAD *v14; 
  __int64 v15; 
  VOID **v16; 
  _ETHREAD *v17; 
  unsigned int v18; 
  bool v19; 
  INT8 IsElevatedRid; 
  VOID **v21; 
  int v22; 
  _ETHREAD *v23; 
  void *Sid; 
  unsigned __int8 *v25; 
  int v26; 
  _DWORD *v27; 
  VOID **v28; 
  _ETHREAD *v29; 
  __int64 v30; 
  int v31; 
  int v32; 
  _ETHREAD *v33; 
  VOID **v34; 
  unsigned int v35; 
  VOID **v36; 
  VOID **v37; 
  _ETHREAD *v38; 
  unsigned int v39; 
  unsigned int v40; 
  unsigned int v41; 
  __int64 *v42; 
  __int64 v43; 
  __int64 v44; 
  VOID **v45; 
  VOID *v46; 
  _BOOL4 v47; 
  _ETHREAD *v48; 
  unsigned int v49; 
  VOID **v50; 
  _ETHREAD *v51; 
  unsigned int TokenAccessInformationBufferSize; 
  _TOKEN_ACCESS_INFORMATION *v53; 
  _ETHREAD *v54; 
  unsigned int v55; 
  unsigned int v56; 
  unsigned int v57; 
  __int64 v58; 
  __int64 *v59; 
  __int64 v60; 
  VOID **v61; 
  VOID **v62; 
  _ETHREAD *v63; 
  unsigned int v64; 
  VOID **v65; 
  VOID **v66; 
  _ETHREAD *v67; 
  INT16 v68; 
  unsigned int v69; 
  unsigned int v70; 
  VOID **v71; 
  _ETHREAD *v72; 
  INT16 v73; 
  unsigned int v74; 
  int v75; 
  int v76; 
  unsigned int v77; 
  __int64 *v78; 
  __int64 v79; 
  __int64 v80; 
  unsigned int v81; 
  unsigned int v82; 
  __int64 *v83; 
  __int64 v84; 
  __int64 v85; 
  VOID **v86; 
  VOID **v87; 
  VOID **v88; 
  char *v89; 
  __int64 v90; 
  unsigned int v91; 
  _ETHREAD *v92; 
  __int64 v93; 
  UINT64 v94; 
  VOID **v95; 
  VOID *v96; 
  VOID **v97; 
  VOID **v98; 
  _ETHREAD *v99; 
  __int64 v100; 
  _AUTHZBASEP_SECURITY_ATTRIBUTES_INFORMATION *v101; 
  _AUTHZBASEP_SECURITY_ATTRIBUTES_INFORMATION *v102; 
  unsigned int v103; 
  VOID **v104; 
  VOID **v105; 
  int v106; 
  _ETHREAD *v107; 
  unsigned int *v108; 
  unsigned int v109; 
  unsigned int v110; 
  unsigned int v111; 
  __int64 *v112; 
  __int64 v113; 
  __int64 v114; 
  VOID **v115; 
  _ETHREAD *v116; 
  _ETHREAD *v117; 
  __int64 v118; 
  UINT64 v119; 
  VOID *TargetSid; 
  VOID **NextTargetSid; 
  VOID **NextTargetSida; 
  UINT64 *RemainingTargetSidBufferSize; 
  UINT64 *pRestrictedSidsSALength; 
  UINT64 *pPackageSidLength; 
  UINT64 *pCapabilitySidsLength; 
  UINT64 *pCapabilitySidsSALength; 
  UINT64 *pTrustSidLength; 
  UINT64 *pSecurityAttributesLength; 
  UINT64 RemainingTargetSufferSize; 
  UINT64 pPrivilegeCount; 
  UINT64 PackageSidLength; 
  UINT64 pRestrictedSidsLength; 
  UINT64 pGroupsLength; 
  __int128 v135; 
  __int128 v136; 
  __int128 v137; 
  _SID_AND_ATTRIBUTES IntegritySA; 
  UINT64 SecurityAttributesLength; 
  UINT64 pReturnLength; 
  UINT64 TrustSidLength; 

  v3 = 0i64;
  LODWORD(pReturnLength) = 0;
  LODWORD(pPrivilegeCount) = 0;
  v135 = 0i64;
  v136 = 0i64;
  v137 = 0i64;
  if( TokenInformationClass == TokenVirtualizationEnabled )
  {
LABEL_2:
    v7 = *((_DWORD *)AccessToken + 50);
    if( TokenInformationClass == TokenVirtualizationAllowed )
    {
      *(_DWORD *)TokenInformation = (*((_DWORD *)AccessToken + 50) & 0x200) != 0;
    }
    else
    {
      switch( TokenInformationClass )
      {
        case TokenVirtualizationEnabled:
          v8 = v7 >> 10;
          break;
        case TokenUIAccess:
          v8 = v7 >> 12;
          break;
        case TokenIsAppContainer:
          v8 = v7 >> 14;
          break;
        case TokenHasRestrictions:
          *(_BYTE *)TokenInformation = (*((_DWORD *)AccessToken + 50) & 0x810) != 0;
          return 0;
        default:
          v8 = HIWORD(v7);
          break;
      }
      *(_DWORD *)TokenInformation = v8 & 1;
    }
  }
  else
  {
    switch( TokenInformationClass )
    {
      case TokenUser:
        CurrentThread = (_ETHREAD *)KeGetCurrentThread();
        --CurrentThread->Tcb.KernelApcDisable;
        ExAcquireResourceSharedLite(*((_QWORD *)AccessToken + 6), 1);
        v11 = 4 * *(unsigned __int8 *)(**((_QWORD **)AccessToken + 19) + 1i64) + 24;
        PoolWithTag = (_SID_AND_ATTRIBUTES *)ExAllocatePoolWithTag(1ui64, v11, 538994003i64);
        v13 = PoolWithTag;
        if( !PoolWithTag )
          goto LABEL_70;
        RtlCopySidAndAttributesArray(
          1ui64,
          *((_SID_AND_ATTRIBUTES **)AccessToken + 19),
          v11,
          PoolWithTag,
          &PoolWithTag[1],
          (VOID **)&RemainingTargetSufferSize,
          &RemainingTargetSufferSize);
        goto LABEL_10;
      case TokenGroups:
        v54 = (_ETHREAD *)KeGetCurrentThread();
        --v54->Tcb.KernelApcDisable;
        ExAcquireResourceSharedLite(*((_QWORD *)AccessToken + 6), 1);
        v55 = *((_DWORD *)AccessToken + 31);
        v56 = 16 * v55 - 8;
        v57 = v56;
        if( v55 > 1 )
        {
          v58 = v55 - 1;
          v59 = (__int64 *)(*((_QWORD *)AccessToken + 19) + 16i64);
          do
          {
            v60 = *v59;
            v59 += 2;
            v56 += 4 * *(unsigned __int8 *)(v60 + 1) + 8;
            v57 = v56;
            --v58;
          }
          while( v58 );
        }
        v61 = ExAllocatePoolWithTag(1ui64, v57, 538994003i64);
        v62 = v61;
        if( !v61 )
          goto LABEL_70;
        *(_DWORD *)v61 = *((_DWORD *)AccessToken + 31) - 1;
        RtlCopySidAndAttributesArray(
          (unsigned int)(*((_DWORD *)AccessToken + 31) - 1),
          (_SID_AND_ATTRIBUTES *)(*((_QWORD *)AccessToken + 19) + 16i64),
          v56,
          (_SID_AND_ATTRIBUTES *)(v61 + 1),
          (char *)v61 + (unsigned int)(16 * *((_DWORD *)AccessToken + 31) - 32) + 24,
          (VOID **)&RemainingTargetSufferSize,
          &RemainingTargetSufferSize);
        ExReleaseResourceLite(*((PERESOURCE *)AccessToken + 6));
        KeLeaveCriticalRegion();
        result = 0;
        *TokenInformation = v62;
        return result;
      case TokenPrivileges:
        v67 = (_ETHREAD *)KeGetCurrentThread();
        --v67->Tcb.KernelApcDisable;
        ExAcquireResourceSharedLite(*((_QWORD *)AccessToken + 6), 1);
        SepTokenPrivilegeCount((_TOKEN *)AccessToken, v68);
        if( v69 <= 1 )
          v70 = 16;
        else
          v70 = 12 * v69 + 4;
        v71 = ExAllocatePoolWithTag(1ui64, v70, 538994003i64);
        v13 = v71;
        if( !v71 )
          goto LABEL_70;
        SepConvertTokenPrivileges((_TOKEN *)AccessToken, (_TOKEN_PRIVILEGES *)v71);
        goto LABEL_10;
      case TokenOwner:
        v63 = (_ETHREAD *)KeGetCurrentThread();
        --v63->Tcb.KernelApcDisable;
        ExAcquireResourceSharedLite(*((_QWORD *)AccessToken + 6), 1);
        v64 = 4
            * *(unsigned __int8 *)(*(_QWORD *)(*((_QWORD *)AccessToken + 19)
                                             + 16i64 * *((unsigned int *)AccessToken + 36))
                                 + 1i64)
            + 16;
        v65 = ExAllocatePoolWithTag(1ui64, v64, 538994003i64);
        v13 = v65;
        if( !v65 )
          goto LABEL_70;
        *v65 = v65 + 1;
        RtlCopySid(
          v64 - 8,
          v65 + 1,
          *(VOID **)(*((_QWORD *)AccessToken + 19) + 16i64 * *((unsigned int *)AccessToken + 36)));
        goto LABEL_10;
      case TokenPrimaryGroup:
        v48 = (_ETHREAD *)KeGetCurrentThread();
        --v48->Tcb.KernelApcDisable;
        ExAcquireResourceSharedLite(*((_QWORD *)AccessToken + 6), 1);
        v49 = 4 * *(unsigned __int8 *)(*((_QWORD *)AccessToken + 21) + 1i64) + 16;
        v50 = ExAllocatePoolWithTag(1ui64, v49, 538994003i64);
        v13 = v50;
        if( !v50 )
          goto LABEL_70;
        *v50 = v50 + 1;
        RtlCopySid(v49 - 8, v50 + 1, *((VOID **)AccessToken + 21));
        goto LABEL_10;
      case TokenDefaultDacl:
        v92 = (_ETHREAD *)KeGetCurrentThread();
        --v92->Tcb.KernelApcDisable;
        ExAcquireResourceSharedLite(*((_QWORD *)AccessToken + 6), 1);
        v93 = *((_QWORD *)AccessToken + 23);
        v94 = 8i64;
        if( v93 )
          v94 = *(unsigned __int16 *)(v93 + 2) + 8i64;
        v95 = ExAllocatePoolWithTag(1ui64, v94, 538994003i64);
        v13 = v95;
        if( !v95 )
          goto LABEL_70;
        v96 = v95 + 1;
        if( !*((_QWORD *)AccessToken + 23) )
          goto LABEL_137;
        *v95 = v96;
        memmove(v96, *((const VOID **)AccessToken + 23), *(unsigned __int16 *)(*((_QWORD *)AccessToken + 23) + 2i64));
        goto LABEL_10;
      case TokenSource:
        v97 = ExAllocatePoolWithTag(1ui64, 0x10ui64, 538994003i64);
        if( !v97 )
          return -1073741670;
        *(_OWORD *)v97 = *(_OWORD *)AccessToken;
        *TokenInformation = v97;
        return 0;
      case TokenType:
        v98 = ExAllocatePoolWithTag(1ui64, 4ui64, 538994003i64);
        if( !v98 )
          return -1073741670;
        *(_DWORD *)v98 = *((_DWORD *)AccessToken + 48);
        *TokenInformation = v98;
        return 0;
      case TokenImpersonationLevel:
        if( *((_DWORD *)AccessToken + 48) != 2 )
          return -1073741821;
        v66 = ExAllocatePoolWithTag(1ui64, 4ui64, 538994003i64);
        if( !v66 )
          return -1073741670;
        *(_DWORD *)v66 = *((_DWORD *)AccessToken + 49);
        *TokenInformation = v66;
        return 0;
      case TokenStatistics:
        v28 = ExAllocatePoolWithTag(1ui64, 0x38ui64, 538994003i64);
        v13 = v28;
        if( !v28 )
          return -1073741670;
        *v28 = (VOID *)*((_QWORD *)AccessToken + 2);
        v28[1] = (VOID *)*((_QWORD *)AccessToken + 3);
        *((_DWORD *)v28 + 6) = *((_DWORD *)AccessToken + 48);
        *((_DWORD *)v28 + 7) = *((_DWORD *)AccessToken + 49);
        v28[2] = (VOID *)*((_QWORD *)AccessToken + 5);
        v29 = (_ETHREAD *)KeGetCurrentThread();
        --v29->Tcb.KernelApcDisable;
        ExAcquireResourceSharedLite(*((_QWORD *)AccessToken + 6), 1);
        v13[8] = *((_DWORD *)AccessToken + 34);
        v30 = *((_QWORD *)AccessToken + 23);
        v31 = *((_DWORD *)AccessToken + 34) - 4 * *(unsigned __int8 *)(*((_QWORD *)AccessToken + 21) + 1i64) - 8;
        if( v30 )
          v31 -= *(unsigned __int16 *)(v30 + 2);
        v13[9] = v31;
        v13[9] = *((_DWORD *)AccessToken + 35);
        v13[10] = *((_DWORD *)AccessToken + 31) - 1;
        SepTokenPrivilegeCount((_TOKEN *)AccessToken, v31);
        v13[11] = v32;
        *((_QWORD *)v13 + 6) = *((_QWORD *)AccessToken + 7);
        goto LABEL_10;
      case TokenSessionId:
        SeQuerySessionIdToken(AccessToken, (UINT64 *)TokenInformation);
        return 0;
      case TokenGroupsAndPrivileges:
        v72 = (_ETHREAD *)KeGetCurrentThread();
        --v72->Tcb.KernelApcDisable;
        ExAcquireResourceSharedLite(*((_QWORD *)AccessToken + 6), 1);
        SepTokenPrivilegeCount((_TOKEN *)AccessToken, v73);
        v74 = *((_DWORD *)AccessToken + 31);
        LODWORD(SecurityAttributesLength) = v75;
        v76 = 12 * v75;
        v77 = 16 * v74;
        LODWORD(pReturnLength) = 12 * v75;
        LODWORD(TrustSidLength) = 16 * v74;
        if( v74 )
        {
          v78 = (__int64 *)*((_QWORD *)AccessToken + 19);
          v79 = v74;
          do
          {
            v80 = *v78;
            v78 += 2;
            v77 += (4 * *(unsigned __int8 *)(v80 + 1) + 15) & 0xFFFFFFF8;
            --v79;
          }
          while( v79 );
        }
        v81 = *((_DWORD *)AccessToken + 32);
        LODWORD(pPrivilegeCount) = 16 * v81;
        v82 = 16 * v81;
        if( v81 )
        {
          v83 = (__int64 *)*((_QWORD *)AccessToken + 20);
          v84 = v81;
          do
          {
            v85 = *v83;
            v83 += 2;
            v82 += (4 * *(unsigned __int8 *)(v85 + 1) + 15) & 0xFFFFFFF8;
            --v84;
          }
          while( v84 );
        }
        v86 = ExAllocatePoolWithTag(1ui64, v82 + v77 + v76 + 56, 538994003i64);
        v87 = v86;
        if( v86 )
        {
          v88 = v86 + 7;
          v86[6] = (VOID *)*((_QWORD *)AccessToken + 3);
          *((_DWORD *)v86 + 1) = v77;
          *(_DWORD *)v86 = *((_DWORD *)AccessToken + 31);
          v86[1] = v86 + 7;
          *((_DWORD *)v86 + 5) = v82;
          *((_DWORD *)v86 + 4) = *((_DWORD *)AccessToken + 32);
          if( *((_DWORD *)AccessToken + 32) )
            v3 = (char *)v88 + ((v77 + 7i64) & 0xFFFFFFFFFFFFFFF8ui64);
          v86[3] = v3;
          *((_DWORD *)v86 + 9) = pReturnLength;
          *((_DWORD *)v86 + 8) = SecurityAttributesLength;
          v89 = (char *)v88 + v77 + (unsigned __int64)v82;
          v90 = (unsigned int)TrustSidLength;
          v91 = v77 - TrustSidLength;
          v87[5] = v89;
          RtlCopySidAndAttributesArray(
            *((unsigned int *)AccessToken + 31),
            *((_SID_AND_ATTRIBUTES **)AccessToken + 19),
            v91,
            (_SID_AND_ATTRIBUTES *)(v87 + 7),
            (char *)v87 + v90 + 56,
            (VOID **)&RemainingTargetSufferSize,
            &RemainingTargetSufferSize);
          if( *((_DWORD *)v87 + 4) )
            RtlCopySidAndAttributesArray(
              *((unsigned int *)AccessToken + 32),
              *((_SID_AND_ATTRIBUTES **)AccessToken + 20),
              v82 - (unsigned int)pPrivilegeCount,
              (_SID_AND_ATTRIBUTES *)v87[3],
              (char *)v87[3] + (unsigned int)pPrivilegeCount,
              (VOID **)&RemainingTargetSufferSize,
              &RemainingTargetSufferSize);
          SepConvertTokenPrivilegesToLuidAndAttributes((_TOKEN *)AccessToken, (_LUID_AND_ATTRIBUTES *)v87[5]);
          ExReleaseResourceLite(*((PERESOURCE *)AccessToken + 6));
          KeLeaveCriticalRegion();
          result = 0;
          *TokenInformation = v87;
        }
        else
        {
          ExReleaseResourceLite(*((PERESOURCE *)AccessToken + 6));
          KeLeaveCriticalRegion();
          return -1073741670;
        }
        return result;
      case TokenElevationType:
        v21 = ExAllocatePoolWithTag(1ui64, 4ui64, 538994003i64);
        if( !v21 )
          return -1073741670;
        v22 = *(_DWORD *)(*((_QWORD *)AccessToken + 27) + 32i64);
        if( (v22 & 4) != 0 )
        {
          *(_DWORD *)v21 = 3;
        }
        else
        {
          LOBYTE(v3) = (v22 & 2) != 0;
          *(_DWORD *)v21 = (_DWORD)v3 + 1;
        }
        *TokenInformation = v21;
        return 0;
      case TokenElevation:
        v16 = ExAllocatePoolWithTag(1ui64, 4ui64, 538994003i64);
        if( !v16 )
          return -1073741670;
        v17 = (_ETHREAD *)KeGetCurrentThread();
        --v17->Tcb.KernelApcDisable;
        ExAcquireResourceSharedLite(*((_QWORD *)AccessToken + 6), 1);
        v18 = *((_DWORD *)AccessToken + 31);
        v19 = (*((_QWORD *)AccessToken + 8) & 0x1120160684i64) != 0;
        if( v18 )
        {
          do
          {
            if( v19 )
              break;
            IsElevatedRid = RtlIsElevatedRid(*((_QWORD *)AccessToken + 19) + 16i64 * (unsigned int)v3);
            LODWORD(v3) = (_DWORD)v3 + 1;
            v19 = IsElevatedRid;
          }
          while( (unsigned int)v3 < v18 );
        }
        ExReleaseResourceLite(*((PERESOURCE *)AccessToken + 6));
        KeLeaveCriticalRegion();
        *(_DWORD *)v16 = v19;
        *TokenInformation = v16;
        return 0;
      case TokenHasRestrictions:
      case TokenVirtualizationAllowed:
      case TokenUIAccess:
      case TokenIsAppContainer:
      case TokenPrivateNameSpace:
        goto LABEL_2;
      case TokenAccessInformation:
        v51 = (_ETHREAD *)KeGetCurrentThread();
        pGroupsLength = 0i64;
        HIDWORD(pRestrictedSidsLength) = 0;
        --v51->Tcb.KernelApcDisable;
        LODWORD(pRestrictedSidsLength) = 0;
        PackageSidLength = 0i64;
        HIDWORD(pPrivilegeCount) = 0;
        LODWORD(TrustSidLength) = 0;
        LODWORD(SecurityAttributesLength) = 0;
        ExAcquireResourceSharedLite(*((_QWORD *)AccessToken + 6), 1);
        TokenAccessInformationBufferSize = SepGetTokenAccessInformationBufferSize(
                                             (_TOKEN *)AccessToken,
                                             0,
                                             0i64,
                                             &pPrivilegeCount,
                                             (UINT64 *)((char *)&pGroupsLength + 4),
                                             &pGroupsLength,
                                             (UINT64 *)((char *)&pRestrictedSidsLength + 4),
                                             &pRestrictedSidsLength,
                                             (UINT64 *)((char *)&PackageSidLength + 4),
                                             &PackageSidLength,
                                             (UINT64 *)((char *)&pPrivilegeCount + 4),
                                             &TrustSidLength,
                                             &SecurityAttributesLength);
        v53 = (_TOKEN_ACCESS_INFORMATION *)ExAllocatePoolWithTag(1ui64, TokenAccessInformationBufferSize, 538994003i64);
        v13 = v53;
        if( !v53 )
          goto LABEL_70;
        LODWORD(pSecurityAttributesLength) = SecurityAttributesLength;
        LODWORD(pTrustSidLength) = TrustSidLength;
        LODWORD(pCapabilitySidsSALength) = HIDWORD(pPrivilegeCount);
        LODWORD(pPackageSidLength) = HIDWORD(PackageSidLength);
        LODWORD(pCapabilitySidsLength) = PackageSidLength;
        LODWORD(RemainingTargetSidBufferSize) = HIDWORD(pRestrictedSidsLength);
        LODWORD(pRestrictedSidsSALength) = pRestrictedSidsLength;
        LODWORD(TargetSid) = HIDWORD(pGroupsLength);
        LODWORD(NextTargetSida) = pGroupsLength;
        SepCopyTokenAccessInformation(
          (_TOKEN *)AccessToken,
          v53,
          TokenAccessInformationBufferSize,
          (unsigned int)pPrivilegeCount,
          (UINT64)TargetSid,
          (UINT64)NextTargetSida,
          (UINT64)RemainingTargetSidBufferSize,
          (UINT64)pRestrictedSidsSALength,
          (UINT64)pPackageSidLength,
          (UINT64)pCapabilitySidsLength,
          (UINT64)pCapabilitySidsSALength,
          (UINT64)pTrustSidLength,
          (UINT64)pSecurityAttributesLength,
          0,
          0i64);
        goto LABEL_10;
      case TokenIntegrityLevel:
        v23 = (_ETHREAD *)KeGetCurrentThread();
        IntegritySA = 0i64;
        --v23->Tcb.KernelApcDisable;
        ExAcquireResourceSharedLite(*((_QWORD *)AccessToken + 6), 1);
        SepCopyTokenIntegrity((_TOKEN *)AccessToken, &IntegritySA);
        Sid = IntegritySA.Sid;
        LODWORD(v25) = RtlSubAuthorityCountSid((INT64)IntegritySA.Sid);
        v26 = *v25;
        if( (_BYTE)v26 )
        {
          LODWORD(v27) = RtlSubAuthoritySid((INT64)Sid, (unsigned int)(v26 - 1));
          LODWORD(v3) = *v27;
        }
        *(_DWORD *)TokenInformation = (_DWORD)v3;
        ExReleaseResourceLite(*((PERESOURCE *)AccessToken + 6));
        KeLeaveCriticalRegion();
        return 0;
      case TokenCapabilities:
        v38 = (_ETHREAD *)KeGetCurrentThread();
        --v38->Tcb.KernelApcDisable;
        ExAcquireResourceSharedLite(*((_QWORD *)AccessToken + 6), 1);
        v39 = *((_DWORD *)AccessToken + 200);
        v40 = 16 * v39 + 24;
        v41 = v40;
        if( v39 )
        {
          v42 = (__int64 *)*((_QWORD *)AccessToken + 99);
          v43 = v39;
          do
          {
            v44 = *v42;
            v42 += 2;
            v40 += 4 * *(unsigned __int8 *)(v44 + 1) + 8;
            v41 = v40;
            --v43;
          }
          while( v43 );
        }
        v45 = ExAllocatePoolWithTag(1ui64, v41, 538994003i64);
        v37 = v45;
        if( !v45 )
          goto LABEL_70;
        *(_DWORD *)v45 = *((_DWORD *)AccessToken + 200);
        RtlCopySidAndAttributesArray(
          *((unsigned int *)AccessToken + 200),
          *((_SID_AND_ATTRIBUTES **)AccessToken + 99),
          v40,
          (_SID_AND_ATTRIBUTES *)(v45 + 1),
          (char *)v45 + (unsigned int)(16 * *((_DWORD *)AccessToken + 200)) + 24,
          (VOID **)&RemainingTargetSufferSize,
          &RemainingTargetSufferSize);
        goto LABEL_39;
      case TokenAppContainerSid:
        v33 = (_ETHREAD *)KeGetCurrentThread();
        --v33->Tcb.KernelApcDisable;
        ExAcquireResourceSharedLite(*((_QWORD *)AccessToken + 6), 1);
        v34 = (VOID **)*((_QWORD *)AccessToken + 98);
        if( v34 )
          v35 = 4 * *((unsigned __int8 *)v34 + 1) + 16;
        else
          v35 = 8;
        v36 = ExAllocatePoolWithTag(1ui64, v35, 538994003i64);
        v37 = v36;
        if( !v36 )
          goto LABEL_70;
        if( !v34 )
          goto LABEL_38;
        v46 = (VOID *)*((_QWORD *)AccessToken + 98);
        goto LABEL_51;
      case TokenAppContainerNumber:
        v14 = (_ETHREAD *)KeGetCurrentThread();
        --v14->Tcb.KernelApcDisable;
        ExAcquireResourceSharedLite(*((_QWORD *)AccessToken + 6), 1);
        v15 = *((_QWORD *)AccessToken + 135);
        if( v15 )
          LODWORD(v3) = *(_DWORD *)(v15 + 40);
        ExReleaseResourceLite(*((PERESOURCE *)AccessToken + 6));
        KeLeaveCriticalRegion();
        *(_DWORD *)TokenInformation = (_DWORD)v3;
        return 0;
      case TokenUserClaimAttributes:
      case TokenDeviceClaimAttributes:
        *TokenInformation = 0i64;
        v99 = (_ETHREAD *)KeGetCurrentThread();
        --v99->Tcb.KernelApcDisable;
        ExAcquireResourceSharedLite(*((_QWORD *)AccessToken + 6), 1);
        v100 = *((_QWORD *)AccessToken + 137);
        if( v100
          && ((v101 = *(_AUTHZBASEP_SECURITY_ATTRIBUTES_INFORMATION **)(v100 + 576)) != 0i64
           || TokenInformationClass != TokenUserClaimAttributes)
          && ((v102 = *(_AUTHZBASEP_SECURITY_ATTRIBUTES_INFORMATION **)(v100 + 584)) != 0i64
           || TokenInformationClass != TokenDeviceClaimAttributes) )
        {
          if( TokenInformationClass == TokenUserClaimAttributes )
            v102 = v101;
          AuthzBasepQueryClaimAttributesToken(v102, 0i64, 0i64, &pReturnLength);
          v103 = pReturnLength;
        }
        else
        {
          DWORD2(v136) = 0;
          *(_QWORD *)&v136 = (char *)&v135 + 8;
          v102 = (_AUTHZBASEP_SECURITY_ATTRIBUTES_INFORMATION *)&v135;
          v103 = 16;
          *((_QWORD *)&v135 + 1) = (char *)&v135 + 8;
          *((_QWORD *)&v137 + 1) = &v137;
          *(_QWORD *)&v137 = &v137;
        }
        v104 = ExAllocatePoolWithTag(1ui64, v103, 538994003i64);
        v105 = v104;
        if( !v104 )
          goto LABEL_70;
        v106 = AuthzBasepQueryClaimAttributesToken(v102, v104, v103, &pReturnLength);
        ExReleaseResourceLite(*((PERESOURCE *)AccessToken + 6));
        KeLeaveCriticalRegion();
        if( v106 >= 0 )
          *TokenInformation = v105;
        else
          ExFreePoolWithTag(v105, 0);
        return v106;
      case TokenDeviceGroups:
        v107 = (_ETHREAD *)KeGetCurrentThread();
        --v107->Tcb.KernelApcDisable;
        ExAcquireResourceSharedLite(*((_QWORD *)AccessToken + 6), 1);
        v108 = (unsigned int *)*((_QWORD *)AccessToken + 137);
        if( v108 && (v109 = *v108) != 0 )
        {
          v110 = 16 * v109 + 8;
        }
        else
        {
          v109 = 0;
          v110 = 24;
        }
        v111 = v110;
        if( v109 )
        {
          v112 = (__int64 *)*((_QWORD *)v108 + 1);
          v113 = v109;
          do
          {
            v114 = *v112;
            v112 += 2;
            v110 += 4 * *(unsigned __int8 *)(v114 + 1) + 8;
            v111 = v110;
            --v113;
          }
          while( v113 );
        }
        v115 = ExAllocatePoolWithTag(1ui64, v111, 538994003i64);
        if( !v115 )
          goto LABEL_70;
        *(_OWORD *)v115 = 0i64;
        v115[2] = 0i64;
        *(_DWORD *)v115 = v109;
        if( v109 )
          RtlCopySidAndAttributesArray(
            **((unsigned int **)AccessToken + 137),
            *(_SID_AND_ATTRIBUTES **)(*((_QWORD *)AccessToken + 137) + 8i64),
            v110,
            (_SID_AND_ATTRIBUTES *)(v115 + 1),
            &v115[2 * v109 + 1],
            (VOID **)&RemainingTargetSufferSize,
            &RemainingTargetSufferSize);
        ExReleaseResourceLite(*((PERESOURCE *)AccessToken + 6));
        KeLeaveCriticalRegion();
        *TokenInformation = v115;
        return 0;
      case TokenProcessTrustLevel:
        v116 = (_ETHREAD *)KeGetCurrentThread();
        --v116->Tcb.KernelApcDisable;
        ExAcquireResourceSharedLite(*((_QWORD *)AccessToken + 6), 1);
        v34 = (VOID **)*((_QWORD *)AccessToken + 138);
        if( v34 )
          v35 = 4 * *((unsigned __int8 *)v34 + 1) + 16;
        else
          v35 = 8;
        v36 = ExAllocatePoolWithTag(1ui64, v35, 538994003i64);
        v37 = v36;
        if( !v36 )
          goto LABEL_70;
        if( !v34 )
          goto LABEL_38;
        v46 = (VOID *)*((_QWORD *)AccessToken + 138);
LABEL_51:
        v34 = v36 + 1;
        RtlCopySid(v35 - 8, v36 + 1, v46);
LABEL_38:
        *v37 = v34;
LABEL_39:
        ExReleaseResourceLite(*((PERESOURCE *)AccessToken + 6));
        KeLeaveCriticalRegion();
        *TokenInformation = v37;
        return 0;
      case MaxTokenInfoClass:
        v117 = (_ETHREAD *)KeGetCurrentThread();
        --v117->Tcb.KernelApcDisable;
        ExAcquireResourceSharedLite(*((_QWORD *)AccessToken + 6), 1);
        v118 = *((_QWORD *)AccessToken + 144);
        v119 = 16i64;
        if( v118 )
          v119 = *(unsigned __int16 *)(v118 + 42) + 16i64;
        v95 = ExAllocatePoolWithTag(1ui64, v119, 538994003i64);
        v13 = v95;
        if( !v95 )
        {
LABEL_70:
          ExReleaseResourceLite(*((PERESOURCE *)AccessToken + 6));
          KeLeaveCriticalRegion();
          return -1073741670;
        }
        if( *((_QWORD *)AccessToken + 144) )
        {
          *((_BYTE *)v95 + 8) = 1;
          *v95 = v95 + 2;
          memmove(
            v95 + 2,
            *(const VOID **)(*((_QWORD *)AccessToken + 144) + 48i64),
            *(unsigned __int16 *)(*((_QWORD *)AccessToken + 144) + 42i64));
        }
        else
        {
          *((_BYTE *)v95 + 8) = 0;
LABEL_137:
          *v95 = 0i64;
        }
LABEL_10:
        ExReleaseResourceLite(*((PERESOURCE *)AccessToken + 6));
        KeLeaveCriticalRegion();
        *TokenInformation = v13;
        break;
      case MaxTokenInfoClass|TokenGroups:
        v47 = (*((_DWORD *)AccessToken + 50) & 0x4000) != 0 && !SepCanTokenMatchAllPackageSid((_TOKEN *)AccessToken);
        *(_DWORD *)TokenInformation = v47;
        return 0;
      case TokenAppContainerNumber|TokenAuditPolicy:
        LODWORD(NextTargetSid) = 0;
        wil_details_FeatureReporting_ReportUsageToService(
          (wil_details_FeatureReportingCache *)&stru_140CF2E80 + 823,
          0x126C519ui64,
          0i64,
          0i64,
          (FEATURE_LOGGED_TRAITS *)&Feature_PPLEnforcement_logged_traits,
          (INT64)NextTargetSid);
        return -1073741821;
      default:
        return -1073741821;
    }
  }
  return 0;
}

Referenced by:

AlpcpCheckConnectionSecurity
CmpBuildAdminInformation
CmpCreateRegistryProcessToken
CmpGenerateAppHiveSecurityDescriptor
CmpIsSystemEntity
CmpVEExecuteParseLogic
EtwpAcquireTokenAccessInformation
EtwpBuildProcessEvent
EtwpPsProvTraceProcess
NtCompareTokens
ObpCaptureBoundaryDescriptor
ObpLookupObjectName
ObpVerifyCreatorAccessCheck
PiDqOpenUserObjectRegKey
PsIsProcessAppContainer
PspAllocateAndQueryNotificationChannel
PspAllocateProcess
RtlCheckTokenCapability
RtlIsSandboxedToken
RtlpIsAppContainer
RtlpQueryLowBoxId
SeQuerySigningPolicyWorker
SeTokenIsElevated
SepCheckCapabilities