VhdiGetPartitionNumber
NTSTATUS __stdcall VhdiGetPartitionNumber(
_DRIVE_LAYOUT_INFORMATION_EX *DriveLayout,
PARTITION_INFORMATION_EX *PartitionInformation,
UINT64 *PartitionNumber){
ULONG PartitionCount;
__int64 v4;
NTSTATUS v5;
ULONG PartitionStyle;
bool v7;
__int64 v8;
if( !DriveLayout || !PartitionInformation || !PartitionNumber )
return -1073741811;
PartitionCount = DriveLayout->PartitionCount;
v4 = 0i64;
v5 = -1073741198;
if( !PartitionCount )
return v5;
PartitionStyle = DriveLayout->PartitionStyle;
while( 1 )
{
if( !PartitionStyle )
{
v7 = *(&DriveLayout->PartitionEntry[0].StartingOffset.QuadPart + 18 * v4) == PartitionInformation->StartingOffset.QuadPart;
goto LABEL_12;
}
if( PartitionStyle == 1 )
break;
LABEL_13:
v4 = (unsigned int)(v4 + 1);
if( (unsigned int)v4 >= PartitionCount )
return v5;
}
v8 = *(_QWORD *)DriveLayout->PartitionEntry[0].Gpt.PartitionId[9 * v4].Data4
- *(_QWORD *)PartitionInformation->Gpt.PartitionId[0].Data4;
if( !v8 )
v8 = *(_QWORD *)&DriveLayout->PartitionEntry[0].Gpt.PartitionId[9 * v4 + 1].Data1
- *(_QWORD *)&PartitionInformation->Gpt.PartitionId[1].Data1;
v7 = v8 == 0;
LABEL_12:
if( !v7 )
goto LABEL_13;
v5 = 0;
*(_DWORD *)PartitionNumber = *(&DriveLayout->PartitionEntry[0].PartitionNumber + 36 * v4);
return v5;
}Referenced by:
VhdiInitializeBootDisk