NtFilterBootOption

__int64 __fastcall NtFilterBootOption(int a1, int a2, unsigned int a3, _QWORD *a4, size_t Size){
  int v6; 
  int v7; 
  INT64 v8; 
  int v9; 
  unsigned int v10; 
  int v11; 
  int v12; 
  _QWORD *v13; 
  unsigned int v14; 
  unsigned int *v15; 
  int v16; 
  __int16 v17; 
  __int64 v18; 
  INT64 IsMember; 
  PVOID P; 
  UINT8 dst[72]; 
  v6 = a2;
  v7 = a1;
  P = 0i64;
  *(_QWORD *)dst = 0i64;
  LOBYTE(IsMember) = SeSinglePrivilegeCheck(*(_QWORD *)&SeTcbPrivilege, *((_BYTE *)KeGetCurrentThread() + 562));
  if( !(_BYTE)IsMember
    && ((int)RtlCheckTokenMembership(
               0i64,
               SeAliasAdminsSid,
               (UINT8 *)&IsMember,
               v8,
               IsMember,
               (INT64)P,
               *(INT64 *)dst,
               *(INT64 *)&dst[8]) < 0
     || !(_BYTE)IsMember) )
  {
    v9 = -1073741790;
    goto LABEL_58;
  }
  if( !qword_140CF4AF8 )
  {
    v9 = -2143092730;
    goto LABEL_58;
  }
  if( v7 )
  {
    if( v7 == 1 )
    {
      if( v6 )
      {
        if( a3 )
        {
          if( a4 )
          {
            v10 = Size;
            if( (_DWORD)Size )
            {
              v12 = dword_140CF9D98;
              if( !_bittest(&v12, HIBYTE(a3) & 0xF) )
              {
LABEL_22:
                v9 = 0;
                goto LABEL_58;
              }
              if( *((_BYTE *)KeGetCurrentThread() + 562) )
              {
                if( (unsigned __int64)a4 + (unsigned int)Size > 0x7FFFFFFF0000i64
                  || (_QWORD *)((char *)a4 + (unsigned int)Size) < a4 )
                {
                  MEMORY[0x7FFFFFFF0000] = 0;
                }
                if( (unsigned int)Size > 8 )
                {
                  P = ExAllocatePoolWithTag(PagedPool, (unsigned int)Size, 0x62536553ui64);
                  if( !P )
                  {
                    v9 = -1073741801;
                    HIDWORD(IsMember) = -1073741801;
                    goto LABEL_58;
                  }
                  v13 = P;
                  memmove((UINT8 *)P, (UINT8 *)a4, (unsigned int)Size);
                  a4 = v13;
                  v6 = a2;
                }
                else
                {
                  memmove(dst, (UINT8 *)a4, (unsigned int)Size);
                  a4 = dst;
                }
                v7 = a1;
              }
              goto LABEL_33;
            }
          }
        }
      }
    }
    else
    {
      if( v7 != 2 )
      {
        v9 = -1073741585;
        goto LABEL_58;
      }
      if( v6 )
      {
        if( a3 )
        {
          if( !a4 )
          {
            v10 = Size;
            if( !(_DWORD)Size )
            {
              v11 = dword_140CF9D98;
              if( !_bittest(&v11, HIBYTE(a3) & 0xF) )
                goto LABEL_22;
LABEL_33:
              v14 = 0;
              v9 = 0;
              if( *((_WORD *)qword_140CF4AF8 + 18) )
              {
                v15 = (unsigned int *)(qword_140CF9DA8 + 8);
                while( 1 )
                {
                  if( *(v15 - 1) == a3 )
                  {
                    v16 = *(v15 - 2);
                    if( !v16 || v16 == v6 )
                    {
                      v17 = *(_WORD *)(*v15 + qword_140CF9DA0);
                      if( ((v17 & 0x20) == 0 || (dword_140C54384 & 4) != 0)
                        && ((v17 & 0x40) == 0 || (dword_140C54384 & 0x10) != 0) )
                      {
                        break;
                      }
                    }
                  }
                  ++v14;
                  v15 += 3;
                  if( v14 >= *((unsigned __int16 *)qword_140CF4AF8 + 18) )
                    goto LABEL_22;
                }
                if( v7 == 1 )
                {
                  v9 = SepSecureBootValidateBcdDataAgainstBcdRule(qword_140CF9DA8 + 12i64 * v14, (BYTE *)a4, v10);
                }
                else
                {
                  v9 = 0;
                  v18 = *(unsigned int *)(qword_140CF9DA8 + 12i64 * v14 + 8);
                  if( (*(_BYTE *)(v18 + qword_140CF9DA0) & 0x1F) != 8 || *(_WORD *)(v18 + qword_140CF9DA0 + 2) )
                    v9 = -1069350910;
                }
              }
              goto LABEL_58;
            }
          }
        }
      }
    }
LABEL_57:
    v9 = -1073741811;
    goto LABEL_58;
  }
  if( v6 || a3 || a4 || (_DWORD)Size )
    goto LABEL_57;
  HIDWORD(IsMember) = 0;
  if( !_InterlockedCompareExchange(&dword_140CF9D94, 0, 0) )
  {
    v9 = SepSecureBootCorrectBcd();
    HIDWORD(IsMember) = v9;
    if( v9 < 0 )
      goto LABEL_58;
    _InterlockedExchange(&dword_140CF9D94, 1);
  }
  v9 = HIDWORD(IsMember);
LABEL_58:
  if( P )
    ExFreePoolWithTag(P, 0x62536553u);
  return(unsigned int)v9;
}

Referenced by:

No references.