FsRtlMdlReadEx

INT64 __stdcall FsRtlMdlReadEx(
        FILE_OBJECT *FileObject,
        LARGE_INTEGER *FileOffset,
        UINT64 Length,
        UINT64 LockKey,
        MDL **MdlChain,
        IO_STATUS_BLOCK *IoStatus){
  int v6; 
  ULONG v7; 
  int v10; 
  INT64 result; 
  _DEVICE_OBJECT *RelatedDeviceObject; 
  PIRP v13; 
  PIRP v14; 
  __int64 v15; 
  v6 = LockKey;
  v7 = Length;
  if( FsRtlMdlRead(FileObject, FileOffset, Length, LockKey, MdlChain, IoStatus) )
    return 0;
  RelatedDeviceObject = IoGetRelatedDeviceObject(FileObject);
  v13 = IoBuildAsynchronousFsdRequest(3u, RelatedDeviceObject, 0i64, v7, FileOffset, 0i64);
  v14 = v13;
  if( v13 )
  {
    v15 = *((_QWORD *)v13 + 23);
    *(_QWORD *)(v15 - 24) = FileObject;
    *(_BYTE *)(v15 - 71) = 2;
    *(_DWORD *)(v15 - 56) = v6;
    *((_DWORD *)v14 + 4) |= 4u;
    v10 = IoSynchronousCallDriver(RelatedDeviceObject, v14);
    IoStatus->Status = *((_DWORD *)v14 + 12);
    IoStatus->Information = *((_QWORD *)v14 + 7);
    if( v10 >= 0 )
    {
      *MdlChain = (MDL *)*((_QWORD *)v14 + 1);
      *((_QWORD *)v14 + 1) = 0i64;
    }
    IoFreeIrp(v14);
    return(unsigned int)v10;
  }
  result = 3221225626i64;
  IoStatus->Status = -1073741670;
  return result;
}

Referenced by:

No references.