3 * COPYRIGHT: See COPYING in the top level directory
4 * PROJECT: ReactOS kernel
5 * FILE: ntoskrnl/fs/mdl.c
6 * PURPOSE: No purpose listed.
8 * PROGRAMMERS: No programmer listed.
12 #include <internal/debug.h>
14 extern ULONG CcFastReadResourceMiss
;
15 extern ULONG CcFastReadNoWait
;
22 FsRtlIncrementCcFastReadResourceMiss( VOID
)
24 CcFastReadResourceMiss
++;
32 FsRtlIncrementCcFastReadNotPossible( VOID
)
34 CcFastReadNotPossible
++;
42 FsRtlIncrementCcFastReadWait( VOID
)
52 FsRtlIncrementCcFastReadNoWait( VOID
)
58 /**********************************************************************
73 IN PFILE_OBJECT FileObject
,
74 IN PLARGE_INTEGER FileOffset
,
78 OUT PIO_STATUS_BLOCK IoStatus
81 return FALSE
; /* FIXME: call FsRtlMdlReadDev ? */
85 /**********************************************************************
87 * FsRtlMdlReadComplete@8
98 FsRtlMdlReadComplete(IN PFILE_OBJECT FileObject
,
101 PDEVICE_OBJECT DeviceObject
[2] = {NULL
};
102 PDRIVER_OBJECT DriverObject
= NULL
;
107 DeviceObject
[0] = IoGetRelatedDeviceObject (FileObject
);
108 DriverObject
= DeviceObject
[0]->DriverObject
;
109 if (NULL
!= DriverObject
->FastIoDispatch
)
112 if (IRP_MJ_READ
<= DriverObject
->FastIoDispatch
->Count
)
116 if (NULL
== DriverObject
->FastIoDispatch
->Dispatch
[IRP_MJ_READ
])
120 return DriverObject
->FastIoDispatch
->Dispatch
123 NULL
/* FIXME: how to get the IRP? */
130 DeviceObject
[1] = IoGetBaseFileSystemDeviceObject (FileObject
);
132 * Did IoGetBaseFileSystemDeviceObject ()
133 * returned the same device
134 * IoGetRelatedDeviceObject () returned?
136 if (DeviceObject
[1] != DeviceObject
[0])
139 DriverObject
= DeviceObject
[1]->DriverObject
;
140 if (NULL
!= DriverObject
->FastIoDispatch
)
143 * Check if the driver provides
146 if (IRP_MJ_READ
<= DriverObject
->FastIoDispatch
->Count
)
148 if (NULL
== DriverObject
->FastIoDispatch
->Dispatch
[IRP_MJ_READ
])
155 DeviceObject
[0] = DeviceObject
[1];
157 return FsRtlMdlReadCompleteDev (
165 /**********************************************************************
167 * FsRtlMdlReadCompleteDev@12
176 * From Bo Branten's ntifs.h v13.
177 * (CcMdlReadCompleteDev declared in internal/cc.h)
183 FsRtlMdlReadCompleteDev (
184 IN PFILE_OBJECT FileObject
,
186 IN PDEVICE_OBJECT DeviceObject
189 FileObject
= FileObject
; /* unused parameter */
190 CcMdlReadCompleteDev (MdlChain
, DeviceObject
);
195 /**********************************************************************
210 IN PFILE_OBJECT FileObject
,
211 IN PLARGE_INTEGER FileOffset
,
215 OUT PIO_STATUS_BLOCK IoStatus
,
216 IN PDEVICE_OBJECT DeviceObject
223 /**********************************************************************
225 * FsRtlMdlWriteComplete@12
237 FsRtlMdlWriteComplete (
238 IN PFILE_OBJECT FileObject
,
239 IN PLARGE_INTEGER FileOffset
,
243 return FALSE
; /* FIXME: call FsRtlMdlWriteCompleteDev ? */
247 /**********************************************************************
249 * FsRtlMdlWriteCompleteDev@16
261 FsRtlMdlWriteCompleteDev (
262 IN PFILE_OBJECT FileObject
,
263 IN PLARGE_INTEGER FileOffset
,
265 IN PDEVICE_OBJECT DeviceObject
272 /**********************************************************************
274 * FsRtlPrepareMdlWrite@24
286 FsRtlPrepareMdlWrite (
287 IN PFILE_OBJECT FileObject
,
288 IN PLARGE_INTEGER FileOffset
,
292 OUT PIO_STATUS_BLOCK IoStatus
295 return FALSE
; /* call FsRtlPrepareMdlWriteDev ? */
299 /**********************************************************************
301 * FsRtlPrepareMdlWriteDev@28
313 FsRtlPrepareMdlWriteDev (
314 IN PFILE_OBJECT FileObject
,
315 IN PLARGE_INTEGER FileOffset
,
319 OUT PIO_STATUS_BLOCK IoStatus
,
320 IN PDEVICE_OBJECT DeviceObject