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