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