IopGetVolumeId

NTSTATUS __stdcall IopGetVolumeId(PVOID FileObject, _LINK_TRACKING_INFORMATION *ObjectId, UINT64 Length){
  _DEVICE_OBJECT *v5; 
  UINT64 v6; 
  PIRP *v7; 
  UINT64 v8; 
  PIRP v9; 
  NTSTATUS result; 
  __int128 v11; 
  __int128 Object; 
  __int64 v13; 
  _IO_STATUS_BLOCK IoStatusBlock; 
  __int128 v15[4]; 

  v13 = 0i64;
  IoStatusBlock = 0i64;
  Object = 0i64;
  memset(v15, 0i64, sizeof(v15));
  KeInitializeEvent((INT64)&Object, 0, 0);
  LODWORD(v5) = IoGetRelatedDeviceObject((INT64)FileObject);
  v6 = (UINT64)v5;
  v7 = IoBuildDeviceIoControlRequest(0, v5, 0i64, 0, 0i64, 0, 0, (PKEVENT)&Object, &IoStatusBlock);
  v8 = (UINT64)v7;
  if( !v7 )
    return -1073741670;
  *((_DWORD *)v7 + 4) |= 4u;
  v7[24] = (PIRP)FileObject;
  v7[14] = (PIRP)v15;
  v7[3] = (PIRP)v15;
  v9 = v7[23];
  v9[-1].Tail.CurrentStackLocation = (_IO_STACK_LOCATION *)FileObject;
  LOBYTE(v9[-1].Tail.DriverContext[2]) = 10;
  LODWORD(v9[-1].Tail.DriverContext[3]) = 64;
  LODWORD(v9[-1].Tail.Thread) = 8;
  ObfReferenceObject(FileObject);
  result = IofCallDriver(v6, v8);
  if( result == 259 )
  {
    KeWaitForSingleObject((UINT64)&Object, 0, 0, 0, 0i64);
    result = IoStatusBlock.Status;
  }
  if( result >= 0 )
  {
    v11 = v15[0];
    ObjectId->Type = NtfsLinkTrackingInformation;
    *(_OWORD *)ObjectId->VolumeId = v11;
  }
  return result;
}

Referenced by:

IopTrackLink