SeQueryInformationToken

INT64 __stdcall SeQueryInformationToken(
        PVOID AccessToken,
        _TOKEN_INFORMATION_CLASS TokenInformationClass,
        PVOID *TokenInformation){
  char *v3; 
  unsigned int v7; 
  unsigned int v8; 
  INT64 result; 
  __int32 v10; 
  unsigned __int64 v11; 
  _ETHREAD *CurrentThread; 
  unsigned int v13; 
  SID_AND_ATTRIBUTES *PoolWithTag; 
  _QWORD *p_Sid; 
  _ETHREAD *v16; 
  __int64 v17; 
  BOOL v18; 
  _DWORD *v19; 
  _ETHREAD *v20; 
  unsigned int v21; 
  bool v22; 
  CHAR IsElevatedRid; 
  _DWORD *v24; 
  int v25; 
  _ETHREAD *v26; 
  int v27; 
  _QWORD *v28; 
  BOOL v29; 
  _ETHREAD *v30; 
  __int64 v31; 
  int v32; 
  _ETHREAD *v33; 
  char *v34; 
  unsigned int v35; 
  _QWORD *v36; 
  _QWORD *v37; 
  _ETHREAD *v38; 
  unsigned int v39; 
  unsigned int v40; 
  unsigned int v41; 
  __int64 *v42; 
  __int64 v43; 
  __int64 v44; 
  char *v45; 
  void *v46; 
  BOOL v47; 
  _ETHREAD *v48; 
  unsigned int v49; 
  _QWORD *v50; 
  _ETHREAD *v51; 
  unsigned int TokenAccessInformationBufferSize; 
  _QWORD *v53; 
  _ETHREAD *v54; 
  unsigned int v55; 
  unsigned int v56; 
  unsigned int v57; 
  __int64 v58; 
  __int64 *v59; 
  __int64 v60; 
  char *v61; 
  void *v62; 
  _ETHREAD *v63; 
  unsigned int v64; 
  _QWORD *v65; 
  _DWORD *v66; 
  _ETHREAD *v67; 
  unsigned int v68; 
  unsigned int v69; 
  _TOKEN_PRIVILEGES *v70; 
  _ETHREAD *v71; 
  int v72; 
  unsigned int v73; 
  int v74; 
  unsigned int v75; 
  __int64 *v76; 
  __int64 v77; 
  __int64 v78; 
  unsigned int v79; 
  unsigned int v80; 
  __int64 *v81; 
  __int64 v82; 
  __int64 v83; 
  char *v84; 
  char *v85; 
  char *v86; 
  char *v87; 
  __int64 v88; 
  unsigned int v89; 
  _ETHREAD *v90; 
  __int64 v91; 
  UINT64 v92; 
  char *v93; 
  UINT8 *v94; 
  _OWORD *v95; 
  _DWORD *v96; 
  _ETHREAD *v97; 
  __int64 v98; 
  _AUTHZBASEP_SECURITY_ATTRIBUTES_INFORMATION *v99; 
  _AUTHZBASEP_SECURITY_ATTRIBUTES_INFORMATION *v100; 
  unsigned int v101; 
  VOID *v102; 
  void *v103; 
  int v104; 
  _ETHREAD *v105; 
  unsigned int *v106; 
  unsigned int v107; 
  unsigned int v108; 
  unsigned int v109; 
  __int64 *v110; 
  __int64 v111; 
  __int64 v112; 
  char *v113; 
  _ETHREAD *v114; 
  _ETHREAD *v115; 
  __int64 v116; 
  UINT64 v117; 
  PSID SidArea; 
  PSID *RemainingSidArea; 
  PSID *RemainingSidAreaa; 
  PULONG RemainingSidAreaSize; 
  UINT64 *pRestrictedSidsSALength; 
  UINT64 *pPackageSidLength; 
  UINT64 *pCapabilitySidsLength; 
  UINT64 *pCapabilitySidsSALength; 
  UINT64 *pTrustSidLength; 
  UINT64 *pSecurityAttributesLength; 
  PSID NextTargetSid; 
  UINT64 pPrivilegeCount; 
  UINT64 v130; 
  UINT64 v131; 
  UINT64 v132; 
  __int128 v133; 
  __int128 v134; 
  __int128 v135; 
  PSID Sid[2]; 
  UINT64 v137; 
  SIZE_T NumberOfBytes; 
  UINT64 v139; 
  v3 = 0i64;
  LODWORD(NumberOfBytes) = 0;
  LODWORD(pPrivilegeCount) = 0;
  v133 = 0i64;
  v134 = 0i64;
  v135 = 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 0i64;
        default:
          v8 = HIWORD(v7);
          break;
      }
      *(_DWORD *)TokenInformation = v8 & 1;
    }
  }
  else
  {
    v10 = TokenInformationClass - 1;
    v11 = 0x140000000ui64;
    switch( v10 )
    {
      case 0:
        CurrentThread = (_ETHREAD *)KeGetCurrentThread();
        --*((_WORD *)CurrentThread + 242);
        LOBYTE(v11) = 1;
        ExAcquireResourceSharedLite(*((PERESOURCE *)AccessToken + 6), v11);
        v13 = 4 * *(unsigned __int8 *)(**((_QWORD **)AccessToken + 19) + 1i64) + 24;
        PoolWithTag = (SID_AND_ATTRIBUTES *)ExAllocatePoolWithTag(PagedPool, v13, 0x20206553ui64);
        p_Sid = &PoolWithTag->Sid;
        if( !PoolWithTag )
          goto LABEL_70;
        RtlCopySidAndAttributesArray(
          1ui64,
          *((SID_AND_ATTRIBUTES **)AccessToken + 19),
          v13,
          PoolWithTag,
          &PoolWithTag[1],
          &NextTargetSid,
          (UINT64 *)&NextTargetSid);
        goto LABEL_10;
      case 1:
        v54 = (_ETHREAD *)KeGetCurrentThread();
        --*((_WORD *)v54 + 242);
        LOBYTE(v11) = 1;
        ExAcquireResourceSharedLite(*((PERESOURCE *)AccessToken + 6), v11);
        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 = (char *)ExAllocatePoolWithTag(PagedPool, v57, 0x20206553ui64);
        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 + 8),
          &v61[16 * *((_DWORD *)AccessToken + 31) - 32 + 24],
          &NextTargetSid,
          (UINT64 *)&NextTargetSid);
        ExReleaseResourceLite(*((PERESOURCE *)AccessToken + 6));
        KeLeaveCriticalRegion();
        result = 0i64;
        *TokenInformation = v62;
        return result;
      case 2:
        v67 = (_ETHREAD *)KeGetCurrentThread();
        --*((_WORD *)v67 + 242);
        LOBYTE(v11) = 1;
        ExAcquireResourceSharedLite(*((PERESOURCE *)AccessToken + 6), v11);
        v68 = SepTokenPrivilegeCount((INT64)AccessToken);
        if( v68 <= 1 )
          v69 = 16;
        else
          v69 = 12 * v68 + 4;
        v70 = (_TOKEN_PRIVILEGES *)ExAllocatePoolWithTag(PagedPool, v69, 0x20206553ui64);
        p_Sid = &v70->PrivilegeCount;
        if( !v70 )
          goto LABEL_70;
        SepConvertTokenPrivileges((_TOKEN *)AccessToken, v70);
        goto LABEL_10;
      case 3:
        v63 = (_ETHREAD *)KeGetCurrentThread();
        --*((_WORD *)v63 + 242);
        LOBYTE(v11) = 1;
        ExAcquireResourceSharedLite(*((PERESOURCE *)AccessToken + 6), v11);
        v64 = 4
            * *(unsigned __int8 *)(*(_QWORD *)(*((_QWORD *)AccessToken + 19)
                                             + 16i64 * *((unsigned int *)AccessToken + 36))
                                 + 1i64)
            + 16;
        v65 = ExAllocatePoolWithTag(PagedPool, v64, 0x20206553ui64);
        p_Sid = v65;
        if( !v65 )
          goto LABEL_70;
        *v65 = v65 + 1;
        RtlCopySid(
          v64 - 8,
          v65 + 1,
          *(PSID *)(*((_QWORD *)AccessToken + 19) + 16i64 * *((unsigned int *)AccessToken + 36)));
        goto LABEL_10;
      case 4:
        v48 = (_ETHREAD *)KeGetCurrentThread();
        --*((_WORD *)v48 + 242);
        LOBYTE(v11) = 1;
        ExAcquireResourceSharedLite(*((PERESOURCE *)AccessToken + 6), v11);
        v49 = 4 * *(unsigned __int8 *)(*((_QWORD *)AccessToken + 21) + 1i64) + 16;
        v50 = ExAllocatePoolWithTag(PagedPool, v49, 0x20206553ui64);
        p_Sid = v50;
        if( !v50 )
          goto LABEL_70;
        *v50 = v50 + 1;
        RtlCopySid(v49 - 8, v50 + 1, *((PSID *)AccessToken + 21));
        goto LABEL_10;
      case 5:
        v90 = (_ETHREAD *)KeGetCurrentThread();
        --*((_WORD *)v90 + 242);
        LOBYTE(v11) = 1;
        ExAcquireResourceSharedLite(*((PERESOURCE *)AccessToken + 6), v11);
        v91 = *((_QWORD *)AccessToken + 23);
        v92 = 8i64;
        if( v91 )
          v92 = *(unsigned __int16 *)(v91 + 2) + 8i64;
        v93 = (char *)ExAllocatePoolWithTag(PagedPool, v92, 0x20206553ui64);
        p_Sid = v93;
        if( !v93 )
          goto LABEL_70;
        v94 = (UINT8 *)(v93 + 8);
        if( !*((_QWORD *)AccessToken + 23) )
          goto LABEL_137;
        *(_QWORD *)v93 = v94;
        memmove(v94, *((UINT8 **)AccessToken + 23), *(unsigned __int16 *)(*((_QWORD *)AccessToken + 23) + 2i64));
        goto LABEL_10;
      case 6:
        v95 = ExAllocatePoolWithTag(PagedPool, 0x10ui64, 0x20206553ui64);
        if( !v95 )
          return 3221225626i64;
        *v95 = *(_OWORD *)AccessToken;
        *TokenInformation = v95;
        return 0i64;
      case 7:
        v96 = ExAllocatePoolWithTag(PagedPool, 4ui64, 0x20206553ui64);
        if( !v96 )
          return 3221225626i64;
        *v96 = *((_DWORD *)AccessToken + 48);
        *TokenInformation = v96;
        return 0i64;
      case 8:
        if( *((_DWORD *)AccessToken + 48) != 2 )
          return 3221225475i64;
        v66 = ExAllocatePoolWithTag(PagedPool, 4ui64, 0x20206553ui64);
        if( !v66 )
          return 3221225626i64;
        *v66 = *((_DWORD *)AccessToken + 49);
        *TokenInformation = v66;
        return 0i64;
      case 9:
        v28 = ExAllocatePoolWithTag(PagedPool, 0x38ui64, 0x20206553ui64);
        p_Sid = v28;
        if( !v28 )
          return 3221225626i64;
        *v28 = *((_QWORD *)AccessToken + 2);
        v28[1] = *((_QWORD *)AccessToken + 3);
        *((_DWORD *)v28 + 6) = *((_DWORD *)AccessToken + 48);
        *((_DWORD *)v28 + 7) = *((_DWORD *)AccessToken + 49);
        v28[2] = *((_QWORD *)AccessToken + 5);
        v30 = (_ETHREAD *)KeGetCurrentThread();
        --*((_WORD *)v30 + 242);
        LOBYTE(v29) = 1;
        ExAcquireResourceSharedLite(*((PERESOURCE *)AccessToken + 6), v29);
        *((_DWORD *)p_Sid + 8) = *((_DWORD *)AccessToken + 34);
        v31 = *((_QWORD *)AccessToken + 23);
        v32 = *((_DWORD *)AccessToken + 34) - 4 * *(unsigned __int8 *)(*((_QWORD *)AccessToken + 21) + 1i64) - 8;
        if( v31 )
          v32 -= *(unsigned __int16 *)(v31 + 2);
        *((_DWORD *)p_Sid + 9) = v32;
        *((_DWORD *)p_Sid + 9) = *((_DWORD *)AccessToken + 35);
        *((_DWORD *)p_Sid + 10) = *((_DWORD *)AccessToken + 31) - 1;
        *((_DWORD *)p_Sid + 11) = SepTokenPrivilegeCount((INT64)AccessToken);
        p_Sid[6] = *((_QWORD *)AccessToken + 7);
        goto LABEL_10;
      case 11:
        SeQuerySessionIdToken(AccessToken, (UINT64 *)TokenInformation);
        return 0i64;
      case 12:
        v71 = (_ETHREAD *)KeGetCurrentThread();
        --*((_WORD *)v71 + 242);
        LOBYTE(v11) = 1;
        ExAcquireResourceSharedLite(*((PERESOURCE *)AccessToken + 6), v11);
        v72 = SepTokenPrivilegeCount((INT64)AccessToken);
        v73 = *((_DWORD *)AccessToken + 31);
        LODWORD(v137) = v72;
        v74 = 12 * v72;
        v75 = 16 * v73;
        LODWORD(NumberOfBytes) = 12 * v72;
        LODWORD(v139) = 16 * v73;
        if( v73 )
        {
          v76 = (__int64 *)*((_QWORD *)AccessToken + 19);
          v77 = v73;
          do
          {
            v78 = *v76;
            v76 += 2;
            v75 += (4 * *(unsigned __int8 *)(v78 + 1) + 15) & 0xFFFFFFF8;
            --v77;
          }
          while( v77 );
        }
        v79 = *((_DWORD *)AccessToken + 32);
        LODWORD(pPrivilegeCount) = 16 * v79;
        v80 = 16 * v79;
        if( v79 )
        {
          v81 = (__int64 *)*((_QWORD *)AccessToken + 20);
          v82 = v79;
          do
          {
            v83 = *v81;
            v81 += 2;
            v80 += (4 * *(unsigned __int8 *)(v83 + 1) + 15) & 0xFFFFFFF8;
            --v82;
          }
          while( v82 );
        }
        v84 = (char *)ExAllocatePoolWithTag(PagedPool, v80 + v75 + v74 + 56, 0x20206553ui64);
        v85 = v84;
        if( v84 )
        {
          v86 = v84 + 56;
          *((_QWORD *)v84 + 6) = *((_QWORD *)AccessToken + 3);
          *((_DWORD *)v84 + 1) = v75;
          *(_DWORD *)v84 = *((_DWORD *)AccessToken + 31);
          *((_QWORD *)v84 + 1) = v84 + 56;
          *((_DWORD *)v84 + 5) = v80;
          *((_DWORD *)v84 + 4) = *((_DWORD *)AccessToken + 32);
          if( *((_DWORD *)AccessToken + 32) )
            v3 = &v86[(v75 + 7i64) & 0xFFFFFFFFFFFFFFF8ui64];
          *((_QWORD *)v84 + 3) = v3;
          *((_DWORD *)v84 + 9) = NumberOfBytes;
          *((_DWORD *)v84 + 8) = v137;
          v87 = &v86[v75 + (unsigned __int64)v80];
          v88 = (unsigned int)v139;
          v89 = v75 - v139;
          *((_QWORD *)v85 + 5) = v87;
          RtlCopySidAndAttributesArray(
            *((unsigned int *)AccessToken + 31),
            *((SID_AND_ATTRIBUTES **)AccessToken + 19),
            v89,
            (SID_AND_ATTRIBUTES *)(v85 + 56),
            &v85[v88 + 56],
            &NextTargetSid,
            (UINT64 *)&NextTargetSid);
          if( *((_DWORD *)v85 + 4) )
            RtlCopySidAndAttributesArray(
              *((unsigned int *)AccessToken + 32),
              *((SID_AND_ATTRIBUTES **)AccessToken + 20),
              v80 - (unsigned int)pPrivilegeCount,
              *((SID_AND_ATTRIBUTES **)v85 + 3),
              (VOID *)(*((_QWORD *)v85 + 3) + (unsigned int)pPrivilegeCount),
              &NextTargetSid,
              (UINT64 *)&NextTargetSid);
          SepConvertTokenPrivilegesToLuidAndAttributes((_TOKEN *)AccessToken, *((_LUID_AND_ATTRIBUTES **)v85 + 5));
          ExReleaseResourceLite(*((PERESOURCE *)AccessToken + 6));
          KeLeaveCriticalRegion();
          result = 0i64;
          *TokenInformation = v85;
        }
        else
        {
          ExReleaseResourceLite(*((PERESOURCE *)AccessToken + 6));
          KeLeaveCriticalRegion();
          return 3221225626i64;
        }
        return result;
      case 17:
        v24 = ExAllocatePoolWithTag(PagedPool, 4ui64, 0x20206553ui64);
        if( !v24 )
          return 3221225626i64;
        v25 = *(_DWORD *)(*((_QWORD *)AccessToken + 27) + 32i64);
        if( (v25 & 4) != 0 )
        {
          *v24 = 3;
        }
        else
        {
          LOBYTE(v3) = (v25 & 2) != 0;
          *v24 = (_DWORD)v3 + 1;
        }
        *TokenInformation = v24;
        return 0i64;
      case 19:
        v19 = ExAllocatePoolWithTag(PagedPool, 4ui64, 0x20206553ui64);
        if( !v19 )
          return 3221225626i64;
        v20 = (_ETHREAD *)KeGetCurrentThread();
        --*((_WORD *)v20 + 242);
        LOBYTE(v18) = 1;
        ExAcquireResourceSharedLite(*((PERESOURCE *)AccessToken + 6), v18);
        v21 = *((_DWORD *)AccessToken + 31);
        v22 = (*((_QWORD *)AccessToken + 8) & 0x1120160684i64) != 0;
        if( v21 )
        {
          do
          {
            if( v22 )
              break;
            IsElevatedRid = RtlIsElevatedRid(*((_QWORD *)AccessToken + 19) + 16i64 * (unsigned int)v3);
            LODWORD(v3) = (_DWORD)v3 + 1;
            v22 = IsElevatedRid;
          }
          while( (unsigned int)v3 < v21 );
        }
        ExReleaseResourceLite(*((PERESOURCE *)AccessToken + 6));
        KeLeaveCriticalRegion();
        *v19 = v22;
        *TokenInformation = v19;
        return 0i64;
      case 20:
      case 22:
      case 25:
      case 28:
      case 41:
        goto LABEL_2;
      case 21:
        v51 = (_ETHREAD *)KeGetCurrentThread();
        v132 = 0i64;
        HIDWORD(v131) = 0;
        --*((_WORD *)v51 + 242);
        LODWORD(v131) = 0;
        v130 = 0i64;
        HIDWORD(pPrivilegeCount) = 0;
        LODWORD(v139) = 0;
        LODWORD(v137) = 0;
        LOBYTE(v11) = 1;
        ExAcquireResourceSharedLite(*((PERESOURCE *)AccessToken + 6), v11);
        TokenAccessInformationBufferSize = SepGetTokenAccessInformationBufferSize(
                                             (_TOKEN *)AccessToken,
                                             0,
                                             0i64,
                                             &pPrivilegeCount,
                                             (UINT64 *)((char *)&v132 + 4),
                                             &v132,
                                             (UINT64 *)((char *)&v131 + 4),
                                             &v131,
                                             (UINT64 *)((char *)&v130 + 4),
                                             &v130,
                                             (UINT64 *)((char *)&pPrivilegeCount + 4),
                                             &v139,
                                             &v137);
        v53 = ExAllocatePoolWithTag(PagedPool, TokenAccessInformationBufferSize, 0x20206553ui64);
        p_Sid = v53;
        if( !v53 )
          goto LABEL_70;
        LODWORD(pSecurityAttributesLength) = v137;
        LODWORD(pTrustSidLength) = v139;
        LODWORD(pCapabilitySidsSALength) = HIDWORD(pPrivilegeCount);
        LODWORD(pPackageSidLength) = HIDWORD(v130);
        LODWORD(pCapabilitySidsLength) = v130;
        LODWORD(RemainingSidAreaSize) = HIDWORD(v131);
        LODWORD(pRestrictedSidsSALength) = v131;
        LODWORD(SidArea) = HIDWORD(v132);
        LODWORD(RemainingSidAreaa) = v132;
        SepCopyTokenAccessInformation(
          (INT64)AccessToken,
          (INT64)v53,
          TokenAccessInformationBufferSize,
          (unsigned int)pPrivilegeCount,
          (UINT64)SidArea,
          (UINT64)RemainingSidAreaa,
          (UINT64)RemainingSidAreaSize,
          (UINT64)pRestrictedSidsSALength,
          (INT64)pPackageSidLength,
          (UINT64)pCapabilitySidsLength,
          (UINT64)pCapabilitySidsSALength,
          (INT64)pTrustSidLength,
          (UINT64)pSecurityAttributesLength,
          0,
          0i64);
        goto LABEL_10;
      case 24:
        v26 = (_ETHREAD *)KeGetCurrentThread();
        *(_OWORD *)Sid = 0i64;
        --*((_WORD *)v26 + 242);
        LOBYTE(v11) = 1;
        ExAcquireResourceSharedLite(*((PERESOURCE *)AccessToken + 6), v11);
        SepCopyTokenIntegrity((INT64)AccessToken);
        v27 = *RtlSubAuthorityCountSid(Sid[0]);
        if( (_BYTE)v27 )
          LODWORD(v3) = *RtlSubAuthoritySid(Sid[0], (unsigned int)(v27 - 1));
        *(_DWORD *)TokenInformation = (_DWORD)v3;
        ExReleaseResourceLite(*((PERESOURCE *)AccessToken + 6));
        KeLeaveCriticalRegion();
        return 0i64;
      case 29:
        v38 = (_ETHREAD *)KeGetCurrentThread();
        --*((_WORD *)v38 + 242);
        LOBYTE(v11) = 1;
        ExAcquireResourceSharedLite(*((PERESOURCE *)AccessToken + 6), v11);
        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 = (char *)ExAllocatePoolWithTag(PagedPool, v41, 0x20206553ui64);
        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 + 8),
          &v45[16 * *((_DWORD *)AccessToken + 200) + 24],
          &NextTargetSid,
          (UINT64 *)&NextTargetSid);
        goto LABEL_39;
      case 30:
        v33 = (_ETHREAD *)KeGetCurrentThread();
        --*((_WORD *)v33 + 242);
        LOBYTE(v11) = 1;
        ExAcquireResourceSharedLite(*((PERESOURCE *)AccessToken + 6), v11);
        v34 = (char *)*((_QWORD *)AccessToken + 98);
        if( v34 )
          v35 = 4 * (unsigned __int8)v34[1] + 16;
        else
          v35 = 8;
        v36 = ExAllocatePoolWithTag(PagedPool, v35, 0x20206553ui64);
        v37 = v36;
        if( !v36 )
          goto LABEL_70;
        if( !v34 )
          goto LABEL_38;
        v46 = (void *)*((_QWORD *)AccessToken + 98);
        goto LABEL_51;
      case 31:
        v16 = (_ETHREAD *)KeGetCurrentThread();
        --*((_WORD *)v16 + 242);
        LOBYTE(v11) = 1;
        ExAcquireResourceSharedLite(*((PERESOURCE *)AccessToken + 6), v11);
        v17 = *((_QWORD *)AccessToken + 135);
        if( v17 )
          LODWORD(v3) = *(_DWORD *)(v17 + 40);
        ExReleaseResourceLite(*((PERESOURCE *)AccessToken + 6));
        KeLeaveCriticalRegion();
        *(_DWORD *)TokenInformation = (_DWORD)v3;
        return 0i64;
      case 32:
      case 33:
        *TokenInformation = 0i64;
        v97 = (_ETHREAD *)KeGetCurrentThread();
        --*((_WORD *)v97 + 242);
        LOBYTE(v11) = 1;
        ExAcquireResourceSharedLite(*((PERESOURCE *)AccessToken + 6), v11);
        v98 = *((_QWORD *)AccessToken + 137);
        if( v98
          && ((v99 = *(_AUTHZBASEP_SECURITY_ATTRIBUTES_INFORMATION **)(v98 + 576)) != 0i64
           || TokenInformationClass != TokenUserClaimAttributes)
          && ((v100 = *(_AUTHZBASEP_SECURITY_ATTRIBUTES_INFORMATION **)(v98 + 584)) != 0i64
           || TokenInformationClass != TokenDeviceClaimAttributes) )
        {
          if( TokenInformationClass == TokenUserClaimAttributes )
            v100 = v99;
          AuthzBasepQueryClaimAttributesToken(v100, 0i64, 0i64, &NumberOfBytes);
          v101 = NumberOfBytes;
        }
        else
        {
          DWORD2(v134) = 0;
          *(_QWORD *)&v134 = (char *)&v133 + 8;
          v100 = (_AUTHZBASEP_SECURITY_ATTRIBUTES_INFORMATION *)&v133;
          v101 = 16;
          *((_QWORD *)&v133 + 1) = (char *)&v133 + 8;
          *((_QWORD *)&v135 + 1) = &v135;
          *(_QWORD *)&v135 = &v135;
        }
        v102 = ExAllocatePoolWithTag(PagedPool, v101, 0x20206553ui64);
        v103 = v102;
        if( !v102 )
          goto LABEL_70;
        v104 = AuthzBasepQueryClaimAttributesToken(v100, v102, v101, &NumberOfBytes);
        ExReleaseResourceLite(*((PERESOURCE *)AccessToken + 6));
        KeLeaveCriticalRegion();
        if( v104 >= 0 )
          *TokenInformation = v103;
        else
          ExFreePoolWithTag(v103, 0);
        return(unsigned int)v104;
      case 36:
        v105 = (_ETHREAD *)KeGetCurrentThread();
        --*((_WORD *)v105 + 242);
        LOBYTE(v11) = 1;
        ExAcquireResourceSharedLite(*((PERESOURCE *)AccessToken + 6), v11);
        v106 = (unsigned int *)*((_QWORD *)AccessToken + 137);
        if( v106 && (v107 = *v106) != 0 )
        {
          v108 = 16 * v107 + 8;
        }
        else
        {
          v107 = 0;
          v108 = 24;
        }
        v109 = v108;
        if( v107 )
        {
          v110 = (__int64 *)*((_QWORD *)v106 + 1);
          v111 = v107;
          do
          {
            v112 = *v110;
            v110 += 2;
            v108 += 4 * *(unsigned __int8 *)(v112 + 1) + 8;
            v109 = v108;
            --v111;
          }
          while( v111 );
        }
        v113 = (char *)ExAllocatePoolWithTag(PagedPool, v109, 0x20206553ui64);
        if( !v113 )
          goto LABEL_70;
        *(_OWORD *)v113 = 0i64;
        *((_QWORD *)v113 + 2) = 0i64;
        *(_DWORD *)v113 = v107;
        if( v107 )
          RtlCopySidAndAttributesArray(
            **((unsigned int **)AccessToken + 137),
            *(SID_AND_ATTRIBUTES **)(*((_QWORD *)AccessToken + 137) + 8i64),
            v108,
            (SID_AND_ATTRIBUTES *)(v113 + 8),
            &v113[16 * v107 + 8],
            &NextTargetSid,
            (UINT64 *)&NextTargetSid);
        ExReleaseResourceLite(*((PERESOURCE *)AccessToken + 6));
        KeLeaveCriticalRegion();
        *TokenInformation = v113;
        return 0i64;
      case 40:
        v114 = (_ETHREAD *)KeGetCurrentThread();
        --*((_WORD *)v114 + 242);
        LOBYTE(v11) = 1;
        ExAcquireResourceSharedLite(*((PERESOURCE *)AccessToken + 6), v11);
        v34 = (char *)*((_QWORD *)AccessToken + 138);
        if( v34 )
          v35 = 4 * (unsigned __int8)v34[1] + 16;
        else
          v35 = 8;
        v36 = ExAllocatePoolWithTag(PagedPool, v35, 0x20206553ui64);
        v37 = v36;
        if( !v36 )
          goto LABEL_70;
        if( !v34 )
          goto LABEL_38;
        v46 = (void *)*((_QWORD *)AccessToken + 138);
LABEL_51:
        v34 = (char *)(v36 + 1);
        RtlCopySid(v35 - 8, v36 + 1, v46);
LABEL_38:
        *v37 = v34;
LABEL_39:
        ExReleaseResourceLite(*((PERESOURCE *)AccessToken + 6));
        KeLeaveCriticalRegion();
        *TokenInformation = v37;
        return 0i64;
      case 43:
        v115 = (_ETHREAD *)KeGetCurrentThread();
        --*((_WORD *)v115 + 242);
        LOBYTE(v11) = 1;
        ExAcquireResourceSharedLite(*((PERESOURCE *)AccessToken + 6), v11);
        v116 = *((_QWORD *)AccessToken + 144);
        v117 = 16i64;
        if( v116 )
          v117 = *(unsigned __int16 *)(v116 + 42) + 16i64;
        v93 = (char *)ExAllocatePoolWithTag(PagedPool, v117, 0x20206553ui64);
        p_Sid = v93;
        if( !v93 )
        {
LABEL_70:
          ExReleaseResourceLite(*((PERESOURCE *)AccessToken + 6));
          KeLeaveCriticalRegion();
          return 3221225626i64;
        }
        if( *((_QWORD *)AccessToken + 144) )
        {
          v93[8] = 1;
          *(_QWORD *)v93 = v93 + 16;
          memmove(
            (UINT8 *)v93 + 16,
            *(UINT8 **)(*((_QWORD *)AccessToken + 144) + 48i64),
            *(unsigned __int16 *)(*((_QWORD *)AccessToken + 144) + 42i64));
        }
        else
        {
          v93[8] = 0;
LABEL_137:
          *(_QWORD *)v93 = 0i64;
        }
LABEL_10:
        ExReleaseResourceLite(*((PERESOURCE *)AccessToken + 6));
        KeLeaveCriticalRegion();
        *TokenInformation = p_Sid;
        break;
      case 45:
        v47 = (*((_DWORD *)AccessToken + 50) & 0x4000) != 0 && !SepCanTokenMatchAllPackageSid((INT64)AccessToken);
        *(_DWORD *)TokenInformation = v47;
        return 0i64;
      case 47:
        LODWORD(RemainingSidArea) = 0;
        wil_details_FeatureReporting_ReportUsageToService(
          &Feature_PPLEnforcement__private_reporting,
          0x126C519ui64,
          0i64,
          0i64,
          (FEATURE_LOGGED_TRAITS *)&Feature_PPLEnforcement_logged_traits,
          (INT64)RemainingSidArea);
        return 3221225475i64;
      default:
        return 3221225475i64;
    }
  }
  return 0i64;
}

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