SepSecureBootCorrectBcd

NTSTATUS __stdcall SepSecureBootCorrectBcd(){
  VOID *v0; 
  NTSTATUS updated; 
  VOID **PoolWithTag; 
  unsigned int v3; 
  __int64 v4; 
  unsigned int v5; 
  VOID *v6; 
  _DWORD *v7; 
  VOID *v8; 
  UINT64 ObjectCount; 
  UINT64 BufferSize; 
  VOID *ObjectHandle; 
  VOID *StoreHandle; 

  ObjectHandle = 0i64;
  v0 = 0i64;
  LODWORD(ObjectCount) = 0;
  LODWORD(BufferSize) = 0;
  StoreHandle = 0i64;
  updated = BiAcquireBcdSyncMutant(0);
  if( updated >= 0 )
  {
    updated = BiOpenSystemStore(&StoreHandle, 0i64);
    BiReleaseBcdSyncMutant(0);
    v0 = StoreHandle;
  }
  else
  {
    BiLogMessage();
  }
  if( updated >= 0 )
  {
    StoreHandle = (VOID *)1;
    updated = BcdEnumerateObjects(v0, (_BCD_OBJECT_DESCRIPTION *)&StoreHandle, 0i64, &BufferSize, &ObjectCount);
    if( updated == -1073741789 )
    {
      PoolWithTag = ExAllocatePoolWithTag(1ui64, (unsigned int)BufferSize, 1649632595i64);
      if( PoolWithTag )
      {
        updated = BcdEnumerateObjects(
                    v0,
                    (_BCD_OBJECT_DESCRIPTION *)&StoreHandle,
                    (_BCD_OBJECT *)PoolWithTag,
                    &BufferSize,
                    &ObjectCount);
        if( updated >= 0 )
        {
          v3 = 0;
          if( (_DWORD)ObjectCount )
          {
            while( 1 )
            {
              BufferSize = (UINT64)&PoolWithTag[3 * v3];
              updated = BcdOpenObject(v0, (_GUID *)BufferSize, &ObjectHandle);
              if( updated < 0 )
                break;
              v4 = *(&stru_140CF2E80 + 911);
              v5 = 0;
              v6 = ObjectHandle;
              if( *(_WORD *)(*(&stru_140CF2E80 + 911) + 36i64) )
              {
                do
                {
                  v7 = (_DWORD *)(qword_140CF9DA8 + 12i64 * v5);
                  if( !*v7 || *v7 == *(_DWORD *)(*(_QWORD *)(BufferSize + 16) + 4i64) )
                  {
                    v8 = (VOID *)*(unsigned __int16 *)((unsigned int)v7[2] + qword_140CF9DA0);
                    if( (((unsigned __int8)v8 & 0x20) == 0 || (dword_140C54384 & 4) != 0)
                      && (((unsigned __int8)v8 & 0x40) == 0 || (dword_140C54384 & 0x10) != 0) )
                    {
                      updated = SepSecureBootUpdateBcdDataForRule(qword_140CF9DA8 + 12i64 * v5, v6, v8);
                      if( updated < 0 )
                        goto LABEL_24;
                      v4 = *(&stru_140CF2E80 + 911);
                    }
                  }
                  ++v5;
                }
                while( v5 < *(unsigned __int16 *)(v4 + 36) );
              }
              BcdCloseObject(v6);
              v6 = 0i64;
              ++v3;
              ObjectHandle = 0i64;
              if( v3 >= (unsigned int)ObjectCount )
                goto LABEL_24;
            }
            v6 = ObjectHandle;
LABEL_24:
            if( v6 )
              BcdCloseObject(v6);
          }
        }
        ExFreePoolWithTag(PoolWithTag, 0x62536553u);
      }
      else
      {
        updated = -1073741801;
      }
    }
  }
  if( v0 )
    BcdCloseStore(v0);
  return updated;
}

Referenced by:

NtFilterBootOption