IopGetVolumeId

NTSTATUS __stdcall IopGetVolumeId(FILE_OBJECT *FileObject, LINK_TRACKING_INFORMATION *ObjectId){
  _DEVICE_OBJECT *RelatedDeviceObject; 
  PIRP v5; 
  IRP *v6; 
  __int64 v7; 
  NTSTATUS Status; 
  __int128 v9; 
  struct _KEVENT Event; 
  struct _IO_STATUS_BLOCK IoStatusBlock; 
  _OWORD result[4]; 
  IoStatusBlock = 0i64;
  memset(&Event, 0, sizeof(Event));
  memset((INT64)result, 0i64);
  KeInitializeEvent(&Event, NotificationEvent, 0);
  RelatedDeviceObject = IoGetRelatedDeviceObject(FileObject);
  v5 = IoBuildDeviceIoControlRequest(0, RelatedDeviceObject, 0i64, 0, 0i64, 0, 0, &Event, &IoStatusBlock);
  v6 = v5;
  if( !v5 )
    return -1073741670;
  *((_DWORD *)v5 + 4) |= 4u;
  *((_QWORD *)v5 + 24) = FileObject;
  *((_QWORD *)v5 + 14) = result;
  *((_QWORD *)v5 + 3) = result;
  v7 = *((_QWORD *)v5 + 23);
  *(_QWORD *)(v7 - 24) = FileObject;
  *(_BYTE *)(v7 - 72) = 10;
  *(_DWORD *)(v7 - 64) = 64;
  *(_DWORD *)(v7 - 56) = 8;
  ObfReferenceObject(FileObject);
  Status = IofCallDriver(RelatedDeviceObject, v6);
  if( Status == 259 )
  {
    KeWaitForSingleObject(&Event, Executive, 0, 0, 0i64);
    Status = IoStatusBlock.Status;
  }
  if( Status >= 0 )
  {
    v9 = result[0];
    ObjectId->Type = NtfsLinkTrackingInformation;
    *(_OWORD *)ObjectId->VolumeId = v9;
  }
  return Status;
}

Referenced by:

IopTrackLink