VhdiQueryVolumeVhdFilePath

WCHAR *__stdcall VhdiQueryVolumeVhdFilePath(VOID *VolumeHandle){
  _HANDLE v1; 
  ULONG OutputBufferLength; 
  VOID **OutputBuffer; 
  VOID **v5; 
  NTSTATUS v6; 
  _IO_STATUS_BLOCK IoStatusBlock; 

  v1 = (int)VolumeHandle;
  IoStatusBlock = 0i64;
  if( !VolumeHandle )
    return 0i64;
  for( OutputBufferLength = 520; ; OutputBufferLength *= 2 )
  {
    OutputBuffer = ExAllocatePoolWithTag(0x200ui64, OutputBufferLength, 1113876566i64);
    v5 = OutputBuffer;
    if( !OutputBuffer )
      break;
    v6 = ZwDeviceIoControlFile(v1, 0, 0i64, 0i64, &IoStatusBlock, 0x2D5928u, 0i64, 0, OutputBuffer, OutputBufferLength);
    if( v6 != -1073741789 )
      goto LABEL_8;
    ExFreeHeapPool(v5);
  }
  v6 = -1073741801;
LABEL_8:
  if( v6 < 0 )
  {
    if( v5 )
    {
      ExFreeHeapPool(v5);
      return 0i64;
    }
  }
  return(WCHAR *)v5;
}

Referenced by:

VhdiInitializeBootDisk