2 * PROJECT: ReactOS FAT file system driver
3 * LICENSE: GNU GPLv3 as published by the Free Software Foundation
4 * FILE: drivers/filesystems/fastfat/fastio.c
5 * PURPOSE: Fast IO routines
6 * PROGRAMMERS: Herve Poussineau (hpoussin@reactos.org)
9 /* INCLUDES *****************************************************************/
14 /* FUNCTIONS ****************************************************************/
18 FatFastIoCheckIfPossible(IN PFILE_OBJECT FileObject
,
19 IN PLARGE_INTEGER FileOffset
,
23 IN BOOLEAN CheckForReadOperation
,
24 OUT PIO_STATUS_BLOCK IoStatus
,
25 IN PDEVICE_OBJECT DeviceObject
)
27 /* Prevent all Fast I/O requests */
28 DPRINT("FatFastIoCheckIfPossible(): returning FALSE.\n");
34 FatFastIoRead(IN PFILE_OBJECT FileObject
,
35 IN PLARGE_INTEGER FileOffset
,
40 OUT PIO_STATUS_BLOCK IoStatus
,
41 IN PDEVICE_OBJECT DeviceObject
)
43 DPRINT("FatFastIoRead()\n");
49 FatFastIoWrite(IN PFILE_OBJECT FileObject
,
50 IN PLARGE_INTEGER FileOffset
,
55 OUT PIO_STATUS_BLOCK IoStatus
,
56 IN PDEVICE_OBJECT DeviceObject
)
58 DPRINT("FatFastIoWrite()\n");
64 FatFastIoQueryBasicInfo(IN PFILE_OBJECT FileObject
,
66 OUT PFILE_BASIC_INFORMATION Buffer
,
67 OUT PIO_STATUS_BLOCK IoStatus
,
68 IN PDEVICE_OBJECT DeviceObject
)
70 DPRINT("FatFastIoQueryBasicInfo()\n");
76 FatFastIoQueryStandardInfo(IN PFILE_OBJECT FileObject
,
78 OUT PFILE_STANDARD_INFORMATION Buffer
,
79 OUT PIO_STATUS_BLOCK IoStatus
,
80 IN PDEVICE_OBJECT DeviceObject
)
82 DPRINT("FatFastIoQueryStandardInfo\n");
88 FatFastIoLock(IN PFILE_OBJECT FileObject
,
89 IN PLARGE_INTEGER FileOffset
,
90 IN PLARGE_INTEGER Length
,
93 BOOLEAN FailImmediately
,
94 BOOLEAN ExclusiveLock
,
95 OUT PIO_STATUS_BLOCK IoStatus
,
96 IN PDEVICE_OBJECT DeviceObject
)
98 DPRINT("FatFastIoLock\n");
104 FatFastIoUnlockSingle(IN PFILE_OBJECT FileObject
,
105 IN PLARGE_INTEGER FileOffset
,
106 IN PLARGE_INTEGER Length
,
109 OUT PIO_STATUS_BLOCK IoStatus
,
110 IN PDEVICE_OBJECT DeviceObject
)
112 DPRINT("FatFastIoUnlockSingle\n");
118 FatFastIoUnlockAll(IN PFILE_OBJECT FileObject
,
120 OUT PIO_STATUS_BLOCK IoStatus
,
121 IN PDEVICE_OBJECT DeviceObject
)
123 DPRINT("FatFastIoUnlockAll\n");
129 FatFastIoUnlockAllByKey(IN PFILE_OBJECT FileObject
,
132 OUT PIO_STATUS_BLOCK IoStatus
,
133 IN PDEVICE_OBJECT DeviceObject
)
135 DPRINT("FatFastIoUnlockAllByKey\n");
141 FatFastIoQueryNetworkOpenInfo(IN PFILE_OBJECT FileObject
,
143 OUT PFILE_NETWORK_OPEN_INFORMATION Buffer
,
144 OUT PIO_STATUS_BLOCK IoStatus
,
145 IN PDEVICE_OBJECT DeviceObject
)
147 DPRINT("FatFastIoQueryNetworkOpenInfo\n");
153 FatMdlRead(IN PFILE_OBJECT FileObject
,
154 IN PLARGE_INTEGER FileOffset
,
158 OUT PIO_STATUS_BLOCK IoStatus
,
159 IN PDEVICE_OBJECT DeviceObject
)
161 DPRINT("FatMdlRead\n");
167 FatMdlReadComplete(IN PFILE_OBJECT FileObject
,
169 IN PDEVICE_OBJECT DeviceObject
)
171 DPRINT("FatMdlReadComplete\n");
177 FatPrepareMdlWrite(IN PFILE_OBJECT FileObject
,
178 IN PLARGE_INTEGER FileOffset
,
182 OUT PIO_STATUS_BLOCK IoStatus
,
183 IN PDEVICE_OBJECT DeviceObject
)
185 DPRINT("FatPrepareMdlWrite\n");
191 FatMdlWriteComplete(IN PFILE_OBJECT FileObject
,
192 IN PLARGE_INTEGER FileOffset
,
194 IN PDEVICE_OBJECT DeviceObject
)
196 DPRINT("FatMdlWriteComplete\n");
202 FatAcquireForCcFlush(IN PFILE_OBJECT FileObject
,
203 IN PDEVICE_OBJECT DeviceObject
)
205 DPRINT("FatAcquireForCcFlush\n");
206 return STATUS_SUCCESS
;
211 FatReleaseForCcFlush(IN PFILE_OBJECT FileObject
,
212 IN PDEVICE_OBJECT DeviceObject
)
214 DPRINT("FatReleaseForCcFlush\n");
215 return STATUS_SUCCESS
;
220 FatAcquireForLazyWrite(IN PVOID Context
,
223 DPRINT("FatAcquireForLazyWrite()\n");
229 FatReleaseFromLazyWrite(IN PVOID Context
)
231 DPRINT("FatReleaseFromLazyWrite()\n");
236 FatAcquireForReadAhead(IN PVOID Context
,
239 DPRINT("FatAcquireForReadAhead()\n");
245 FatReleaseFromReadAhead(IN PVOID Context
)
247 DPRINT("FatReleaseFromReadAhead()\n");
252 FatNoopAcquire(IN PVOID Context
,
260 FatNoopRelease(IN PVOID Context
)
266 FatInitFastIoRoutines(PFAST_IO_DISPATCH FastIoDispatch
)
268 /* Set Fast I/O dispatcher callbacks */
269 FastIoDispatch
->SizeOfFastIoDispatch
= sizeof(FAST_IO_DISPATCH
);
270 FastIoDispatch
->FastIoCheckIfPossible
= FatFastIoCheckIfPossible
;
271 FastIoDispatch
->FastIoRead
= FatFastIoRead
;
272 FastIoDispatch
->FastIoWrite
= FatFastIoWrite
;
273 FastIoDispatch
->FastIoQueryBasicInfo
= FatFastIoQueryBasicInfo
;
274 FastIoDispatch
->FastIoQueryStandardInfo
= FatFastIoQueryStandardInfo
;
275 FastIoDispatch
->FastIoLock
= FatFastIoLock
;
276 FastIoDispatch
->FastIoUnlockSingle
= FatFastIoUnlockSingle
;
277 FastIoDispatch
->FastIoUnlockAll
= FatFastIoUnlockAll
;
278 FastIoDispatch
->FastIoUnlockAllByKey
= FatFastIoUnlockAllByKey
;
279 FastIoDispatch
->FastIoQueryNetworkOpenInfo
= FatFastIoQueryNetworkOpenInfo
;
280 FastIoDispatch
->MdlRead
= FatMdlRead
;
281 FastIoDispatch
->MdlReadComplete
= FatMdlReadComplete
;
282 FastIoDispatch
->PrepareMdlWrite
= FatPrepareMdlWrite
;
283 FastIoDispatch
->MdlWriteComplete
= FatMdlWriteComplete
;
284 FastIoDispatch
->AcquireForCcFlush
= FatAcquireForCcFlush
;
285 FastIoDispatch
->ReleaseForCcFlush
= FatReleaseForCcFlush
;