RtlpGetSetBootStatusData

NTSTATUS __stdcall RtlpGetSetBootStatusData(_HANDLE FileHandle, INT64 a2, INT64 a3){
  VOID *v3; 
  VOID *v4; 
  int v5; 
  char v6; 
  VOID *v7; 
  NTSTATUS result; 
  int v9; 
  __int64 Length; 
  size_t Size; 
  unsigned int Buffer; 
  _LARGE_INTEGER ByteOffset; 
  _IO_STATUS_BLOCK IoStatusBlock; 
  _IO_STATUS_BLOCK v15; 
  size_t v16; 
  _DWORD *v17; 

  Buffer = 0;
  v4 = v3;
  Size = 0;
  v5 = a3;
  ByteOffset.QuadPart = 0i64;
  v6 = a2;
  v7 = *(VOID **)&FileHandle;
  IoStatusBlock = 0i64;
  v15 = 0i64;
  result = ZwReadFile(FileHandle, 0, 0i64, 0i64, &IoStatusBlock, &Buffer, 4u, &ByteOffset, 0i64);
  if( result >= 0 )
  {
    result = RtlBootStatusItemInfo(v5, &ByteOffset, &Size);
    v9 = result;
    if( result >= 0 )
    {
      ByteOffset.anonymous_0.HighPart = 0;
      Length = Size;
      if( Size + (unsigned __int64)ByteOffset.anonymous_0.LowPart > Buffer )
      {
        return -1073741735;
      }
      else if( v16 < Size )
      {
        return -1073741789;
      }
      else
      {
        if( v6 )
        {
          if( BootStatFileHandleAcquired && *(VOID **)&BootStatFileHandle == v7 && BootStatDataCache )
          {
            IoStatusBlock.Information = Size;
            memmove(v4, (char *)BootStatDataCache + ByteOffset.anonymous_0.LowPart, Size);
          }
          else
          {
            v9 = ZwReadFile((_HANDLE)v7, 0, 0i64, 0i64, &IoStatusBlock, v4, Size, &ByteOffset, 0i64);
          }
        }
        else
        {
          if( BootStatFileHandleAcquired && *(VOID **)&BootStatFileHandle == v7 && BootStatDataCache )
            memmove((char *)BootStatDataCache + ByteOffset.anonymous_0.LowPart, v4, Size);
          v9 = ZwWriteFile((_HANDLE)v7, 0, 0i64, 0i64, &IoStatusBlock, v4, Length, &ByteOffset, 0i64);
          if( v9 >= 0 && !BootStatDisableFlush )
            v9 = ZwFlushBuffersFile(v7, &v15);
          RtlpRecordBootStatusData(1, (__int64)v4, ByteOffset.QuadPart, Length);
        }
        if( v9 >= 0 )
        {
          if( v17 )
            *v17 = IoStatusBlock.Information;
        }
        return v9;
      }
    }
  }
  return result;
}

Referenced by:

RtlGetSetBootStatusData