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.