IoVolumeDeviceToGuidPath

INT64 __fastcall IoVolumeDeviceToGuidPath(void *VolumeDeviceObject, _UNICODE_STRING *GuidPath){
  unsigned __int64 v2; 
  __int64 v5; 
  IRP *v6; 
  NTSTATUS Status; 
  unsigned __int16 v8; 
  UNICODE_STRING GuidPatha; 
  UNICODE_STRING VolumeDeviceName; 
  struct _KEVENT Event; 
  struct _IO_STATUS_BLOCK IoStatusBlock; 
  unsigned __int16 OutputBuffer; 
  char v15; 
  v2 = *((unsigned int *)VolumeDeviceObject + 18);
  *(_QWORD *)&GuidPatha.Length = 0i64;
  GuidPatha.Buffer = 0i64;
  memset(&Event, 0, sizeof(Event));
  IoStatusBlock = 0i64;
  VolumeDeviceName = 0i64;
  if( (unsigned int)v2 <= 0x24 && (v5 = 0x1080000084i64, _bittest64(&v5, v2)) )
  {
    KeInitializeEvent(&Event, NotificationEvent, 0);
    v6 = IoBuildDeviceIoControlRequest(
           0x4D0008u,
           (PDEVICE_OBJECT)VolumeDeviceObject,
           0i64,
           0,
           &OutputBuffer,
           0x200u,
           0,
           &Event,
           &IoStatusBlock);
    if( v6 )
    {
      Status = IofCallDriver((PDEVICE_OBJECT)VolumeDeviceObject, v6);
      if( Status == 259 )
      {
        KeWaitForSingleObject(&Event, Executive, 0, 0, 0i64);
        Status = IoStatusBlock.Status;
      }
      if( Status >= 0 )
      {
        v8 = OutputBuffer;
        if( OutputBuffer >= 0x1FEu )
        {
          v8 = 510;
          VolumeDeviceName.Length = 510;
        }
        else
        {
          VolumeDeviceName.Length = OutputBuffer;
        }
        VolumeDeviceName.MaximumLength = v8;
        VolumeDeviceName.Buffer = (wchar_t *)&v15;
        Status = IoVolumeDeviceNameToGuidPath(&VolumeDeviceName, &GuidPatha);
        if( Status >= 0 )
        {
          GuidPath->Length = GuidPatha.Length;
          GuidPath->MaximumLength = GuidPatha.MaximumLength;
          GuidPath->Buffer = GuidPatha.Buffer;
        }
      }
    }
    else
    {
      return(unsigned int)-1073741670;
    }
  }
  else
  {
    return(unsigned int)-1073741811;
  }
  return(unsigned int)Status;
}

Referenced by:

CmpVolumeContextStart
IoVolumeDeviceToGuid
IopValidateJunctionTarget