SyspartGetPhysicalPartitions

__int64 __fastcall SyspartGetPhysicalPartitions(WCHAR *a1, _DWORD *a2, unsigned int a3){
  NTSTATUS SystemPartition; 
  unsigned int v6; 
  NTSTATUS Property; 
  _DWORD *v8; 
  int v9; 
  INT64 v10; 
  __int64 v11; 
  PVOID P; 

  P = 0i64;
  if( a3 >= 0xC )
  {
    a2[2] = 0;
    a2[1] = 12;
    *a2 = 24;
    v6 = a3 - 12;
    Property = SiQueryProperty(a1, 0x15ui64, 0x18ui64, (CHAR **)&P);
    v8 = P;
    SystemPartition = Property;
    if( Property >= 0 )
    {
      v9 = 0;
      if( *((_DWORD *)P + 2) )
      {
        while( 1 )
        {
          v10 = (INT64)&v8[3 * v9 + 3];
          SystemPartition = SiFindSystemPartition(v10);
          if( SystemPartition < 0 )
            break;
          if( *(_DWORD *)(v10 + 8) != -1 )
          {
            a2[1] += 12;
            if( v6 >= 0xC )
            {
              v11 = 3 * ((unsigned int)a2[2] + 1i64);
              *(_QWORD *)&a2[v11] = *(_QWORD *)v10;
              a2[v11 + 2] = *(_DWORD *)(v10 + 8);
              ++a2[2];
              v6 -= 12;
            }
            else
            {
              v6 = 0;
            }
          }
          if( (unsigned int)++v9 >= v8[2] )
            goto LABEL_11;
        }
      }
      else
      {
LABEL_11:
        if( a3 < a2[1] )
          SystemPartition = -2147483643;
      }
    }
    if( v8 )
      ExFreePoolWithTag(v8, 0);
  }
  else
  {
    return(unsigned int)-1073741789;
  }
  return(unsigned int)SystemPartition;
}

Referenced by:

BiSpacesUpdatePhysicalDevicePath