SiQueryProperty

NTSTATUS __stdcall SiQueryProperty(WCHAR *a1, UINT64 a2, UINT64 a3, CHAR **a4){
  unsigned int v4; 
  unsigned int v6; 
  int v7; 
  ULONG OutputBufferLength; 
  VOID **OutputBuffer; 
  void *FileHandle; 
  _IO_STATUS_BLOCK IoStatusBlock; 
  __int64 InputBuffer; 
  int v14; 

  v4 = a2;
  FileHandle = 0i64;
  *a4 = 0i64;
  IoStatusBlock = 0i64;
  InputBuffer = 0i64;
  v14 = 0;
  v6 = a3;
  v7 = SiOpenDevice(a1, &FileHandle);
  if( v7 >= 0 )
  {
    InputBuffer = v4;
    OutputBufferLength = 8;
    if( v6 >= 8 )
      OutputBufferLength = v6;
    OutputBuffer = ExAllocatePoolWithTag(1ui64, OutputBufferLength, 1263556947i64);
    if( OutputBuffer )
    {
      while( 1 )
      {
        v7 = ZwDeviceIoControlFile(
               (_HANDLE)FileHandle,
               0,
               0i64,
               0i64,
               &IoStatusBlock,
               0x2D1400u,
               &InputBuffer,
               0xCu,
               OutputBuffer,
               OutputBufferLength);
        if( ((v7 + 0x80000000) & 0x80000000) == 0 && v7 != -2147483643 )
          break;
        v7 = 0;
        if( *((_DWORD *)OutputBuffer + 1) <= OutputBufferLength )
        {
          *((_DWORD *)OutputBuffer + 1) = OutputBufferLength;
          *a4 = (CHAR *)OutputBuffer;
          OutputBuffer = 0i64;
          break;
        }
        OutputBufferLength = *((_DWORD *)OutputBuffer + 1);
        ExFreePoolWithTag(OutputBuffer, 0);
        OutputBuffer = ExAllocatePoolWithTag(1ui64, OutputBufferLength, 1263556947i64);
        if( !OutputBuffer )
          goto LABEL_9;
      }
    }
    else
    {
LABEL_9:
      v7 = -1073741670;
    }
    if( OutputBuffer )
      ExFreePoolWithTag(OutputBuffer, 0);
  }
  if( FileHandle )
    ZwClose((_HANDLE)FileHandle);
  return v7;
}

Referenced by:

SyspartGetPhysicalPartitions
SyspartIsSpace