SiGetEfiSystemDevice

INT64 __fastcall SiGetEfiSystemDevice(INT64 a1, INT64 a2, CHAR **a3){
  PWCHAR v3; 
  CHAR **v4; 
  PWCHAR *v5; 
  void *v6; 
  unsigned int v7; 
  int v8; 
  WCHAR *PoolWithTag; 
  NTSTATUS EspFromFirmware; 
  WCHAR v11; 
  unsigned int v12; 
  UINT64 i; 
  NTSTATUS DirectoryObject; 
  PWCHAR *v15; 
  char v16; 
  PVOID v17; 
  UINT64 v18; 
  int DriveLayoutInformation; 
  unsigned int v20; 
  __int64 v21; 
  __int64 v22; 
  __int64 v23; 
  int v24; 
  UINT64 SystemPartition; 
  int v27; 
  char SystemDisk[12]; 
  void *DirectoryHandle; 
  PVOID P; 
  PWCHAR v31; 
  CHAR **v32; 
  struct _UNICODE_STRING DestinationString; 
  struct _OBJECT_ATTRIBUTES ObjectAttributes; 
  __int64 OutputBuffer[2]; 
  __int128 v36; 
  __int128 v37; 
  v27 = a1;
  v32 = a3;
  v3 = 0i64;
  DirectoryHandle = 0i64;
  v4 = a3;
  v5 = 0i64;
  v31 = 0i64;
  v6 = 0i64;
  memset(SystemDisk, 0, sizeof(SystemDisk));
  v7 = 0;
  SystemPartition = 0i64;
  v8 = 0;
  memset(OutputBuffer, 0, 12);
  v36 = 0i64;
  v37 = 0i64;
  DestinationString = 0i64;
  memset(&ObjectAttributes, 0, sizeof(ObjectAttributes));
  PoolWithTag = (WCHAR *)ExAllocatePoolWithTag(PagedPool, 0x6Aui64, 0x4B505953ui64);
  if( !PoolWithTag )
  {
    EspFromFirmware = -1073741801;
    goto LABEL_56;
  }
  if( SiDisambiguateSystemDevice((UINT64 *)SystemDisk, &SystemPartition) >= 0 )
    goto LABEL_45;
  RtlInitUnicodeString(&DestinationString, L"\\Device", v11);
  ObjectAttributes.Length = 48;
  ObjectAttributes.RootDirectory = 0i64;
  ObjectAttributes.Attributes = 576;
  ObjectAttributes.ObjectName = &DestinationString;
  *(_OWORD *)&ObjectAttributes.SecurityDescriptor = 0i64;
  EspFromFirmware = ZwOpenDirectoryObject(&DirectoryHandle, 1ui64, &ObjectAttributes);
  if( EspFromFirmware < 0 )
    goto LABEL_50;
  v12 = 4096;
  for( i = 4096i64; ; i = v12 )
  {
    v5 = (PWCHAR *)ExAllocatePoolWithTag(PagedPool, i, 0x4B505953ui64);
    P = v5;
    if( !v5 )
    {
      EspFromFirmware = -1073741801;
      goto LABEL_50;
    }
    HIDWORD(SystemPartition) = 0;
    DirectoryObject = ZwQueryDirectoryObject(
                        DirectoryHandle,
                        v5,
                        v12,
                        0,
                        1u,
                        (UINT64 *)((char *)&SystemPartition + 4),
                        0i64);
    EspFromFirmware = DirectoryObject;
    if( DirectoryObject != 261 )
      break;
    ExFreePoolWithTag(v5, 0);
    v12 += 4096;
  }
  if( (int)(DirectoryObject + 0x80000000) >= 0 && DirectoryObject != -2147483622 )
  {
LABEL_43:
    if( EspFromFirmware < 0 )
      goto LABEL_50;
    v3 = v31;
    v4 = v32;
LABEL_45:
    v27 = -v27;
    if( v3 )
      v24 = RtlStringCbPrintfW(PoolWithTag, 0x6Aui64, (WCHAR *)L"\\Device\\%s\\Partition%lu");
    else
      v24 = RtlStringCbPrintfW(PoolWithTag, 0x6Aui64, (WCHAR *)L"\\Device\\Harddisk%lu\\Partition%lu");
    EspFromFirmware = v24;
    if( v24 >= 0 )
    {
      *v4 = (CHAR *)PoolWithTag;
      goto LABEL_52;
    }
LABEL_50:
    ExFreePoolWithTag(PoolWithTag, 0);
    goto LABEL_52;
  }
  if( !*(_WORD *)v5 )
  {
LABEL_47:
    EspFromFirmware = -1073740718;
    goto LABEL_50;
  }
  v15 = v5 + 1;
  do
  {
    if( !SiIsValidDiskDevice(*v15, v15[2]) )
      goto LABEL_35;
    RtlStringCbPrintfW(PoolWithTag, 0x6Aui64, (WCHAR *)L"\\Device\\%s\\Partition%lu");
    LODWORD(OutputBuffer[0]) = 1;
    *(__int64 *)((char *)OutputBuffer + 4) = 0i64;
    v16 = 0;
    v36 = 0i64;
    v37 = 0i64;
    if( SiIssueSynchronousIoctl(PoolWithTag, v17, OutputBuffer, v18) >= 0 )
    {
      if( BYTE8(v37) == 15 )
        goto LABEL_35;
      if( BYTE8(v37) == 16 )
        v16 = 1;
    }
    if( v6 )
    {
      ExFreePoolWithTag(v6, 0);
      *(_QWORD *)&SystemDisk[4] = 0i64;
    }
    DriveLayoutInformation = SiGetDriveLayoutInformation(PoolWithTag, (DRIVE_LAYOUT_INFORMATION_EX **)&SystemDisk[4]);
    v6 = *(void **)&SystemDisk[4];
    if( DriveLayoutInformation >= 0 && **(_DWORD **)&SystemDisk[4] == 1 )
    {
      v20 = *(_DWORD *)(*(_QWORD *)&SystemDisk[4] + 4i64);
      if( v20 )
      {
        v21 = *(_QWORD *)&SystemDisk[4] + 72i64;
        v22 = v20;
        do
        {
          v23 = *(_QWORD *)(v21 + 8) - *(_QWORD *)&PARTITION_SYSTEM_GUID.Data1;
          if( !v23 )
            v23 = *(_QWORD *)(v21 + 16) - *(_QWORD *)PARTITION_SYSTEM_GUID.Data4;
          if( !v23 )
          {
            if( !v7 || !v8 && v16 )
            {
              v31 = *v15;
              LODWORD(SystemPartition) = *(_DWORD *)v21;
            }
            ++v7;
            if( v16 )
              ++v8;
          }
          v21 += 144i64;
          --v22;
        }
        while( v22 );
      }
    }
LABEL_35:
    v15 += 4;
  }
  while( *((_WORD *)v15 - 4) );
  v5 = (PWCHAR *)P;
  if( !v7 )
    goto LABEL_47;
  if( v7 <= 1 || v8 == 1 )
  {
    EspFromFirmware = 0;
    goto LABEL_43;
  }
  EspFromFirmware = SiGetEspFromFirmware(PoolWithTag);
  if( EspFromFirmware < 0 )
  {
    EspFromFirmware = -1073740719;
    goto LABEL_50;
  }
  *v32 = (CHAR *)PoolWithTag;
LABEL_52:
  if( v6 )
    ExFreePoolWithTag(v6, 0);
  if( v5 )
    ExFreePoolWithTag(v5, 0);
LABEL_56:
  if( DirectoryHandle )
    ZwClose(DirectoryHandle);
  return(unsigned int)EspFromFirmware;
}

Referenced by:

SiGetFirmwareSystemPartition
SiGetSystemDisk