IopSetRemoteLink

INT64 __stdcall IopSetRemoteLink(FILE_OBJECT *FileObject, FILE_TRACKING_INFORMATION *FileInformation){
  __int64 v2; 
  __int64 v3; 
  unsigned int v5; 
  _DEVICE_OBJECT *RelatedDeviceObject; 
  PIRP v7; 
  INT64 v8; 
  __int64 v9; 
  struct _KEVENT Event; 
  struct _IO_STATUS_BLOCK IoStatusBlock; 
  INT64 result[34]; 
  v3 = v2;
  memset((INT64)result, 0i64);
  v5 = 0;
  IoStatusBlock = 0i64;
  memset(&Event, 0, sizeof(Event));
  KeInitializeEvent(&Event, NotificationEvent, 0);
  RelatedDeviceObject = IoGetRelatedDeviceObject(FileObject);
  v7 = IoBuildDeviceIoControlRequest(0x1400ECu, RelatedDeviceObject, 0i64, 0, 0i64, 0, 0, &Event, &IoStatusBlock);
  if( !v7 )
    return 3221225626i64;
  if( v3 )
  {
    v5 = *(_DWORD *)(v3 + 8) + 12;
    if( v5 > 0x110 )
      return 3221225507i64;
    memmove((UINT8 *)result, (UINT8 *)v3, v5);
    result[0] = 0i64;
  }
  *((_DWORD *)v7 + 4) |= 4u;
  *((_QWORD *)v7 + 3) = result;
  v9 = *((_QWORD *)v7 + 23);
  *((_QWORD *)v7 + 24) = FileObject;
  *(_QWORD *)(v9 - 24) = FileObject;
  *(_WORD *)(v9 - 72) = 1037;
  *(_DWORD *)(v9 - 56) = v5;
  ObfReferenceObject(FileObject);
  LODWORD(v8) = IofCallDriver(RelatedDeviceObject, v7);
  if( (_DWORD)v8 == 259 )
  {
    KeWaitForSingleObject(&Event, Executive, 0, 0, 0i64);
    return(unsigned int)IoStatusBlock.Status;
  }
  return v8;
}

Referenced by:

IopTrackLink