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