FsRtlPrepareMdlWriteEx
NTSTATUS __stdcall FsRtlPrepareMdlWriteEx(
PFILE_OBJECT FileObject,
PLARGE_INTEGER FileOffset,
UINT64 Length,
UINT64 LockKey,
_MDL **MdlChain,
PIO_STATUS_BLOCK IoStatus){
unsigned int v6;
unsigned int v7;
int v10;
NTSTATUS result;
_DEVICE_OBJECT *v12;
_DEVICE_OBJECT *v13;
_IRP *v14;
_IRP *v15;
_IO_STACK_LOCATION *CurrentStackLocation;
int Status;
v6 = LockKey;
v7 = Length;
if( FsRtlPrepareMdlWrite(FileObject, FileOffset, Length, LockKey, MdlChain, IoStatus) )
return 0;
LODWORD(v12) = IoGetRelatedDeviceObject((INT64)FileObject);
v13 = v12;
v14 = IoBuildAsynchronousFsdRequest(4ui64, v12, 0i64, v7, FileOffset, IoStatus);
v15 = v14;
if( v14 )
{
CurrentStackLocation = v14->Tail.CurrentStackLocation;
CurrentStackLocation[-1].FileObject = FileObject;
CurrentStackLocation[-1].MinorFunction = 2;
CurrentStackLocation[-1].Parameters.Options = v6;
v15->Flags |= 4u;
v10 = IoSynchronousCallDriver(v13, v15);
if( v10 >= 0 )
{
*MdlChain = v15->MdlAddress;
Status = v15->IoStatus.Status;
v15->MdlAddress = 0i64;
IoStatus->Status = Status;
IoStatus->Information = v15->IoStatus.Information;
}
IoFreeIrp(v15);
return v10;
}
result = -1073741670;
IoStatus->Status = -1073741670;
return result;
}Referenced by:
No references.