2 * FILE: drivers/filesystems/fastfat/fastio.c
3 * PURPOSE: Fast IO routines.
4 * COPYRIGHT: See COPYING in the top level directory
5 * PROJECT: ReactOS kernel
6 * PROGRAMMER: Herve Poussineau (hpoussin@reactos.org)
7 * Pierre Schweitzer (pierre@reactos.org)
15 #if defined(ALLOC_PRAGMA)
16 #pragma alloc_text(INIT, VfatInitFastIoRoutines)
19 static FAST_IO_CHECK_IF_POSSIBLE VfatFastIoCheckIfPossible
;
24 VfatFastIoCheckIfPossible(
25 IN PFILE_OBJECT FileObject
,
26 IN PLARGE_INTEGER FileOffset
,
30 IN BOOLEAN CheckForReadOperation
,
31 OUT PIO_STATUS_BLOCK IoStatus
,
32 IN PDEVICE_OBJECT DeviceObject
)
34 /* Prevent all Fast I/O requests */
35 DPRINT("VfatFastIoCheckIfPossible(): returning FALSE.\n");
37 UNREFERENCED_PARAMETER(FileObject
);
38 UNREFERENCED_PARAMETER(FileOffset
);
39 UNREFERENCED_PARAMETER(Length
);
40 UNREFERENCED_PARAMETER(Wait
);
41 UNREFERENCED_PARAMETER(LockKey
);
42 UNREFERENCED_PARAMETER(CheckForReadOperation
);
43 UNREFERENCED_PARAMETER(IoStatus
);
44 UNREFERENCED_PARAMETER(DeviceObject
);
49 static FAST_IO_READ VfatFastIoRead
;
55 IN PFILE_OBJECT FileObject
,
56 IN PLARGE_INTEGER FileOffset
,
61 OUT PIO_STATUS_BLOCK IoStatus
,
62 IN PDEVICE_OBJECT DeviceObject
)
64 DPRINT("VfatFastIoRead()\n");
66 UNREFERENCED_PARAMETER(FileObject
);
67 UNREFERENCED_PARAMETER(FileOffset
);
68 UNREFERENCED_PARAMETER(Length
);
69 UNREFERENCED_PARAMETER(Wait
);
70 UNREFERENCED_PARAMETER(LockKey
);
71 UNREFERENCED_PARAMETER(Buffer
);
72 UNREFERENCED_PARAMETER(IoStatus
);
73 UNREFERENCED_PARAMETER(DeviceObject
);
78 static FAST_IO_WRITE VfatFastIoWrite
;
84 IN PFILE_OBJECT FileObject
,
85 IN PLARGE_INTEGER FileOffset
,
90 OUT PIO_STATUS_BLOCK IoStatus
,
91 IN PDEVICE_OBJECT DeviceObject
)
93 DPRINT("VfatFastIoWrite()\n");
95 UNREFERENCED_PARAMETER(FileObject
);
96 UNREFERENCED_PARAMETER(FileOffset
);
97 UNREFERENCED_PARAMETER(Length
);
98 UNREFERENCED_PARAMETER(Wait
);
99 UNREFERENCED_PARAMETER(LockKey
);
100 UNREFERENCED_PARAMETER(Buffer
);
101 UNREFERENCED_PARAMETER(IoStatus
);
102 UNREFERENCED_PARAMETER(DeviceObject
);
107 static FAST_IO_QUERY_BASIC_INFO VfatFastIoQueryBasicInfo
;
112 VfatFastIoQueryBasicInfo(
113 IN PFILE_OBJECT FileObject
,
115 OUT PFILE_BASIC_INFORMATION Buffer
,
116 OUT PIO_STATUS_BLOCK IoStatus
,
117 IN PDEVICE_OBJECT DeviceObject
)
121 BOOLEAN Success
= FALSE
;
122 ULONG BufferLength
= sizeof(FILE_BASIC_INFORMATION
);
124 DPRINT("VfatFastIoQueryBasicInfo()\n");
126 FCB
= (PVFATFCB
)FileObject
->FsContext
;
132 FsRtlEnterFileSystem();
134 if (!BooleanFlagOn(FCB
->Flags
, FCB_IS_PAGE_FILE
))
136 if (!ExAcquireResourceSharedLite(&FCB
->MainResource
, Wait
))
138 FsRtlExitFileSystem();
143 Status
= VfatGetBasicInformation(FileObject
,
145 DeviceObject
->DeviceExtension
,
149 if (!BooleanFlagOn(FCB
->Flags
, FCB_IS_PAGE_FILE
))
151 ExReleaseResourceLite(&FCB
->MainResource
);
154 if (NT_SUCCESS(Status
))
156 IoStatus
->Status
= STATUS_SUCCESS
;
157 IoStatus
->Information
= sizeof(FILE_BASIC_INFORMATION
) - BufferLength
;
161 FsRtlExitFileSystem();
166 static FAST_IO_QUERY_STANDARD_INFO VfatFastIoQueryStandardInfo
;
171 VfatFastIoQueryStandardInfo(
172 IN PFILE_OBJECT FileObject
,
174 OUT PFILE_STANDARD_INFORMATION Buffer
,
175 OUT PIO_STATUS_BLOCK IoStatus
,
176 IN PDEVICE_OBJECT DeviceObject
)
180 BOOLEAN Success
= FALSE
;
181 ULONG BufferLength
= sizeof(FILE_STANDARD_INFORMATION
);
183 DPRINT("VfatFastIoQueryStandardInfo()\n");
185 UNREFERENCED_PARAMETER(DeviceObject
);
187 FCB
= (PVFATFCB
)FileObject
->FsContext
;
193 FsRtlEnterFileSystem();
195 if (!BooleanFlagOn(FCB
->Flags
, FCB_IS_PAGE_FILE
))
197 if (!ExAcquireResourceSharedLite(&FCB
->MainResource
, Wait
))
199 FsRtlExitFileSystem();
204 Status
= VfatGetStandardInformation(FCB
,
208 if (!BooleanFlagOn(FCB
->Flags
, FCB_IS_PAGE_FILE
))
210 ExReleaseResourceLite(&FCB
->MainResource
);
213 if (NT_SUCCESS(Status
))
215 IoStatus
->Status
= STATUS_SUCCESS
;
216 IoStatus
->Information
= sizeof(FILE_STANDARD_INFORMATION
) - BufferLength
;
220 FsRtlExitFileSystem();
225 static FAST_IO_LOCK VfatFastIoLock
;
231 IN PFILE_OBJECT FileObject
,
232 IN PLARGE_INTEGER FileOffset
,
233 IN PLARGE_INTEGER Length
,
236 BOOLEAN FailImmediately
,
237 BOOLEAN ExclusiveLock
,
238 OUT PIO_STATUS_BLOCK IoStatus
,
239 IN PDEVICE_OBJECT DeviceObject
)
241 DPRINT("VfatFastIoLock\n");
243 UNREFERENCED_PARAMETER(FileObject
);
244 UNREFERENCED_PARAMETER(FileOffset
);
245 UNREFERENCED_PARAMETER(Length
);
246 UNREFERENCED_PARAMETER(ProcessId
);
247 UNREFERENCED_PARAMETER(Key
);
248 UNREFERENCED_PARAMETER(FailImmediately
);
249 UNREFERENCED_PARAMETER(ExclusiveLock
);
250 UNREFERENCED_PARAMETER(IoStatus
);
251 UNREFERENCED_PARAMETER(DeviceObject
);
256 static FAST_IO_UNLOCK_SINGLE VfatFastIoUnlockSingle
;
261 VfatFastIoUnlockSingle(
262 IN PFILE_OBJECT FileObject
,
263 IN PLARGE_INTEGER FileOffset
,
264 IN PLARGE_INTEGER Length
,
267 OUT PIO_STATUS_BLOCK IoStatus
,
268 IN PDEVICE_OBJECT DeviceObject
)
270 DPRINT("VfatFastIoUnlockSingle\n");
272 UNREFERENCED_PARAMETER(FileObject
);
273 UNREFERENCED_PARAMETER(FileOffset
);
274 UNREFERENCED_PARAMETER(Length
);
275 UNREFERENCED_PARAMETER(ProcessId
);
276 UNREFERENCED_PARAMETER(Key
);
277 UNREFERENCED_PARAMETER(IoStatus
);
278 UNREFERENCED_PARAMETER(DeviceObject
);
283 static FAST_IO_UNLOCK_ALL VfatFastIoUnlockAll
;
289 IN PFILE_OBJECT FileObject
,
291 OUT PIO_STATUS_BLOCK IoStatus
,
292 IN PDEVICE_OBJECT DeviceObject
)
294 DPRINT("VfatFastIoUnlockAll\n");
296 UNREFERENCED_PARAMETER(FileObject
);
297 UNREFERENCED_PARAMETER(ProcessId
);
298 UNREFERENCED_PARAMETER(IoStatus
);
299 UNREFERENCED_PARAMETER(DeviceObject
);
304 static FAST_IO_UNLOCK_ALL_BY_KEY VfatFastIoUnlockAllByKey
;
309 VfatFastIoUnlockAllByKey(
310 IN PFILE_OBJECT FileObject
,
313 OUT PIO_STATUS_BLOCK IoStatus
,
314 IN PDEVICE_OBJECT DeviceObject
)
316 DPRINT("VfatFastIoUnlockAllByKey\n");
318 UNREFERENCED_PARAMETER(FileObject
);
319 UNREFERENCED_PARAMETER(ProcessId
);
320 UNREFERENCED_PARAMETER(Key
);
321 UNREFERENCED_PARAMETER(IoStatus
);
322 UNREFERENCED_PARAMETER(DeviceObject
);
327 static FAST_IO_DEVICE_CONTROL VfatFastIoDeviceControl
;
332 VfatFastIoDeviceControl(
333 IN PFILE_OBJECT FileObject
,
335 IN PVOID InputBuffer OPTIONAL
,
336 IN ULONG InputBufferLength
,
337 OUT PVOID OutputBuffer OPTIONAL
,
338 IN ULONG OutputBufferLength
,
339 IN ULONG IoControlCode
,
340 OUT PIO_STATUS_BLOCK IoStatus
,
341 IN PDEVICE_OBJECT DeviceObject
)
343 DPRINT("VfatFastIoDeviceControl\n");
345 UNREFERENCED_PARAMETER(FileObject
);
346 UNREFERENCED_PARAMETER(Wait
);
347 UNREFERENCED_PARAMETER(InputBuffer
);
348 UNREFERENCED_PARAMETER(InputBufferLength
);
349 UNREFERENCED_PARAMETER(OutputBuffer
);
350 UNREFERENCED_PARAMETER(OutputBufferLength
);
351 UNREFERENCED_PARAMETER(IoControlCode
);
352 UNREFERENCED_PARAMETER(IoStatus
);
353 UNREFERENCED_PARAMETER(DeviceObject
);
358 static FAST_IO_ACQUIRE_FILE VfatAcquireFileForNtCreateSection
;
363 VfatAcquireFileForNtCreateSection(
364 IN PFILE_OBJECT FileObject
)
366 DPRINT("VfatAcquireFileForNtCreateSection\n");
367 UNREFERENCED_PARAMETER(FileObject
);
370 static FAST_IO_RELEASE_FILE VfatReleaseFileForNtCreateSection
;
375 VfatReleaseFileForNtCreateSection(
376 IN PFILE_OBJECT FileObject
)
378 DPRINT("VfatReleaseFileForNtCreateSection\n");
379 UNREFERENCED_PARAMETER(FileObject
);
382 static FAST_IO_DETACH_DEVICE VfatFastIoDetachDevice
;
387 VfatFastIoDetachDevice(
388 IN PDEVICE_OBJECT SourceDevice
,
389 IN PDEVICE_OBJECT TargetDevice
)
391 DPRINT("VfatFastIoDetachDevice\n");
392 UNREFERENCED_PARAMETER(SourceDevice
);
393 UNREFERENCED_PARAMETER(TargetDevice
);
396 static FAST_IO_QUERY_NETWORK_OPEN_INFO VfatFastIoQueryNetworkOpenInfo
;
401 VfatFastIoQueryNetworkOpenInfo(
402 IN PFILE_OBJECT FileObject
,
404 OUT PFILE_NETWORK_OPEN_INFORMATION Buffer
,
405 OUT PIO_STATUS_BLOCK IoStatus
,
406 IN PDEVICE_OBJECT DeviceObject
)
408 DPRINT("VfatFastIoQueryNetworkOpenInfo\n");
410 UNREFERENCED_PARAMETER(FileObject
);
411 UNREFERENCED_PARAMETER(Wait
);
412 UNREFERENCED_PARAMETER(Buffer
);
413 UNREFERENCED_PARAMETER(IoStatus
);
414 UNREFERENCED_PARAMETER(DeviceObject
);
419 static FAST_IO_ACQUIRE_FOR_MOD_WRITE VfatAcquireForModWrite
;
424 VfatAcquireForModWrite(
425 IN PFILE_OBJECT FileObject
,
426 IN PLARGE_INTEGER EndingOffset
,
427 OUT PERESOURCE
* ResourceToRelease
,
428 IN PDEVICE_OBJECT DeviceObject
)
430 DPRINT("VfatAcquireForModWrite\n");
432 UNREFERENCED_PARAMETER(FileObject
);
433 UNREFERENCED_PARAMETER(EndingOffset
);
434 UNREFERENCED_PARAMETER(ResourceToRelease
);
435 UNREFERENCED_PARAMETER(DeviceObject
);
437 return STATUS_INVALID_DEVICE_REQUEST
;
440 static FAST_IO_MDL_READ VfatMdlRead
;
446 IN PFILE_OBJECT FileObject
,
447 IN PLARGE_INTEGER FileOffset
,
451 OUT PIO_STATUS_BLOCK IoStatus
,
452 IN PDEVICE_OBJECT DeviceObject
)
454 DPRINT("VfatMdlRead\n");
456 UNREFERENCED_PARAMETER(FileObject
);
457 UNREFERENCED_PARAMETER(FileOffset
);
458 UNREFERENCED_PARAMETER(Length
);
459 UNREFERENCED_PARAMETER(LockKey
);
460 UNREFERENCED_PARAMETER(MdlChain
);
461 UNREFERENCED_PARAMETER(IoStatus
);
462 UNREFERENCED_PARAMETER(DeviceObject
);
467 static FAST_IO_MDL_READ_COMPLETE VfatMdlReadComplete
;
473 IN PFILE_OBJECT FileObject
,
475 IN PDEVICE_OBJECT DeviceObject
)
477 DPRINT("VfatMdlReadComplete\n");
479 UNREFERENCED_PARAMETER(FileObject
);
480 UNREFERENCED_PARAMETER(MdlChain
);
481 UNREFERENCED_PARAMETER(DeviceObject
);
486 static FAST_IO_PREPARE_MDL_WRITE VfatPrepareMdlWrite
;
492 IN PFILE_OBJECT FileObject
,
493 IN PLARGE_INTEGER FileOffset
,
497 OUT PIO_STATUS_BLOCK IoStatus
,
498 IN PDEVICE_OBJECT DeviceObject
)
500 DPRINT("VfatPrepareMdlWrite\n");
502 UNREFERENCED_PARAMETER(FileObject
);
503 UNREFERENCED_PARAMETER(FileOffset
);
504 UNREFERENCED_PARAMETER(Length
);
505 UNREFERENCED_PARAMETER(LockKey
);
506 UNREFERENCED_PARAMETER(MdlChain
);
507 UNREFERENCED_PARAMETER(IoStatus
);
508 UNREFERENCED_PARAMETER(DeviceObject
);
513 static FAST_IO_MDL_WRITE_COMPLETE VfatMdlWriteComplete
;
518 VfatMdlWriteComplete(
519 IN PFILE_OBJECT FileObject
,
520 IN PLARGE_INTEGER FileOffset
,
522 IN PDEVICE_OBJECT DeviceObject
)
524 DPRINT("VfatMdlWriteComplete\n");
526 UNREFERENCED_PARAMETER(FileObject
);
527 UNREFERENCED_PARAMETER(FileOffset
);
528 UNREFERENCED_PARAMETER(MdlChain
);
529 UNREFERENCED_PARAMETER(DeviceObject
);
534 static FAST_IO_READ_COMPRESSED VfatFastIoReadCompressed
;
539 VfatFastIoReadCompressed(
540 IN PFILE_OBJECT FileObject
,
541 IN PLARGE_INTEGER FileOffset
,
546 OUT PIO_STATUS_BLOCK IoStatus
,
547 OUT PCOMPRESSED_DATA_INFO CompressedDataInfo
,
548 IN ULONG CompressedDataInfoLength
,
549 IN PDEVICE_OBJECT DeviceObject
)
551 DPRINT("VfatFastIoReadCompressed\n");
553 UNREFERENCED_PARAMETER(FileObject
);
554 UNREFERENCED_PARAMETER(FileOffset
);
555 UNREFERENCED_PARAMETER(Length
);
556 UNREFERENCED_PARAMETER(LockKey
);
557 UNREFERENCED_PARAMETER(Buffer
);
558 UNREFERENCED_PARAMETER(MdlChain
);
559 UNREFERENCED_PARAMETER(IoStatus
);
560 UNREFERENCED_PARAMETER(CompressedDataInfo
);
561 UNREFERENCED_PARAMETER(CompressedDataInfoLength
);
562 UNREFERENCED_PARAMETER(DeviceObject
);
567 static FAST_IO_WRITE_COMPRESSED VfatFastIoWriteCompressed
;
572 VfatFastIoWriteCompressed(
573 IN PFILE_OBJECT FileObject
,
574 IN PLARGE_INTEGER FileOffset
,
579 OUT PIO_STATUS_BLOCK IoStatus
,
580 IN PCOMPRESSED_DATA_INFO CompressedDataInfo
,
581 IN ULONG CompressedDataInfoLength
,
582 IN PDEVICE_OBJECT DeviceObject
)
584 DPRINT("VfatFastIoWriteCompressed\n");
586 UNREFERENCED_PARAMETER(FileObject
);
587 UNREFERENCED_PARAMETER(FileOffset
);
588 UNREFERENCED_PARAMETER(Length
);
589 UNREFERENCED_PARAMETER(LockKey
);
590 UNREFERENCED_PARAMETER(Buffer
);
591 UNREFERENCED_PARAMETER(MdlChain
);
592 UNREFERENCED_PARAMETER(IoStatus
);
593 UNREFERENCED_PARAMETER(CompressedDataInfo
);
594 UNREFERENCED_PARAMETER(CompressedDataInfoLength
);
595 UNREFERENCED_PARAMETER(DeviceObject
);
600 static FAST_IO_MDL_READ_COMPLETE_COMPRESSED VfatMdlReadCompleteCompressed
;
605 VfatMdlReadCompleteCompressed(
606 IN PFILE_OBJECT FileObject
,
608 IN PDEVICE_OBJECT DeviceObject
)
610 DPRINT("VfatMdlReadCompleteCompressed\n");
612 UNREFERENCED_PARAMETER(FileObject
);
613 UNREFERENCED_PARAMETER(MdlChain
);
614 UNREFERENCED_PARAMETER(DeviceObject
);
619 static FAST_IO_MDL_WRITE_COMPLETE_COMPRESSED VfatMdlWriteCompleteCompressed
;
624 VfatMdlWriteCompleteCompressed(
625 IN PFILE_OBJECT FileObject
,
626 IN PLARGE_INTEGER FileOffset
,
628 IN PDEVICE_OBJECT DeviceObject
)
630 DPRINT("VfatMdlWriteCompleteCompressed\n");
632 UNREFERENCED_PARAMETER(FileObject
);
633 UNREFERENCED_PARAMETER(FileOffset
);
634 UNREFERENCED_PARAMETER(MdlChain
);
635 UNREFERENCED_PARAMETER(DeviceObject
);
640 static FAST_IO_QUERY_OPEN VfatFastIoQueryOpen
;
647 OUT PFILE_NETWORK_OPEN_INFORMATION NetworkInformation
,
648 IN PDEVICE_OBJECT DeviceObject
)
650 DPRINT("VfatFastIoQueryOpen\n");
652 UNREFERENCED_PARAMETER(Irp
);
653 UNREFERENCED_PARAMETER(NetworkInformation
);
654 UNREFERENCED_PARAMETER(DeviceObject
);
659 static FAST_IO_RELEASE_FOR_MOD_WRITE VfatReleaseForModWrite
;
664 VfatReleaseForModWrite(
665 IN PFILE_OBJECT FileObject
,
666 IN PERESOURCE ResourceToRelease
,
667 IN PDEVICE_OBJECT DeviceObject
)
669 DPRINT("VfatReleaseForModWrite\n");
671 UNREFERENCED_PARAMETER(FileObject
);
672 UNREFERENCED_PARAMETER(ResourceToRelease
);
673 UNREFERENCED_PARAMETER(DeviceObject
);
675 return STATUS_INVALID_DEVICE_REQUEST
;
678 static FAST_IO_ACQUIRE_FOR_CCFLUSH VfatAcquireForCcFlush
;
683 VfatAcquireForCcFlush(
684 IN PFILE_OBJECT FileObject
,
685 IN PDEVICE_OBJECT DeviceObject
)
687 PVFATFCB Fcb
= (PVFATFCB
)FileObject
->FsContext
;
689 DPRINT("VfatAcquireForCcFlush\n");
691 UNREFERENCED_PARAMETER(DeviceObject
);
693 /* Make sure it is not a volume lock */
694 ASSERT(!BooleanFlagOn(Fcb
->Flags
, FCB_IS_VOLUME
));
696 /* Acquire the resource */
697 ExAcquireResourceExclusiveLite(&(Fcb
->MainResource
), TRUE
);
699 return STATUS_SUCCESS
;
702 static FAST_IO_RELEASE_FOR_CCFLUSH VfatReleaseForCcFlush
;
707 VfatReleaseForCcFlush(
708 IN PFILE_OBJECT FileObject
,
709 IN PDEVICE_OBJECT DeviceObject
)
711 PVFATFCB Fcb
= (PVFATFCB
)FileObject
->FsContext
;
713 DPRINT("VfatReleaseForCcFlush\n");
715 UNREFERENCED_PARAMETER(DeviceObject
);
717 /* Make sure it is not a volume lock */
718 ASSERT(!BooleanFlagOn(Fcb
->Flags
, FCB_IS_VOLUME
));
720 /* Release the resource */
721 ExReleaseResourceLite(&(Fcb
->MainResource
));
723 return STATUS_SUCCESS
;
728 VfatAcquireForLazyWrite(
732 PVFATFCB Fcb
= (PVFATFCB
)Context
;
734 DPRINT("VfatAcquireForLazyWrite(): Fcb %p\n", Fcb
);
736 if (!ExAcquireResourceExclusiveLite(&(Fcb
->MainResource
), Wait
))
738 DPRINT("VfatAcquireForLazyWrite(): ExReleaseResourceLite failed.\n");
746 VfatReleaseFromLazyWrite(
749 PVFATFCB Fcb
= (PVFATFCB
)Context
;
751 DPRINT("VfatReleaseFromLazyWrite(): Fcb %p\n", Fcb
);
753 ExReleaseResourceLite(&(Fcb
->MainResource
));
758 VfatAcquireForReadAhead(
762 PVFATFCB Fcb
= (PVFATFCB
)Context
;
764 DPRINT("VfatAcquireForReadAhead(): Fcb %p\n", Fcb
);
766 if (!ExAcquireResourceExclusiveLite(&(Fcb
->MainResource
), Wait
))
768 DPRINT("VfatAcquireForReadAhead(): ExReleaseResourceLite failed.\n");
776 VfatReleaseFromReadAhead(
779 PVFATFCB Fcb
= (PVFATFCB
)Context
;
781 DPRINT("VfatReleaseFromReadAhead(): Fcb %p\n", Fcb
);
783 ExReleaseResourceLite(&(Fcb
->MainResource
));
788 VfatInitFastIoRoutines(
789 PFAST_IO_DISPATCH FastIoDispatch
)
791 FastIoDispatch
->SizeOfFastIoDispatch
= sizeof(FAST_IO_DISPATCH
);
792 FastIoDispatch
->FastIoCheckIfPossible
= VfatFastIoCheckIfPossible
;
793 FastIoDispatch
->FastIoRead
= VfatFastIoRead
;
794 FastIoDispatch
->FastIoWrite
= VfatFastIoWrite
;
795 FastIoDispatch
->FastIoQueryBasicInfo
= VfatFastIoQueryBasicInfo
;
796 FastIoDispatch
->FastIoQueryStandardInfo
= VfatFastIoQueryStandardInfo
;
797 FastIoDispatch
->FastIoLock
= VfatFastIoLock
;
798 FastIoDispatch
->FastIoUnlockSingle
= VfatFastIoUnlockSingle
;
799 FastIoDispatch
->FastIoUnlockAll
= VfatFastIoUnlockAll
;
800 FastIoDispatch
->FastIoUnlockAllByKey
= VfatFastIoUnlockAllByKey
;
801 FastIoDispatch
->FastIoDeviceControl
= VfatFastIoDeviceControl
;
802 FastIoDispatch
->AcquireFileForNtCreateSection
= VfatAcquireFileForNtCreateSection
;
803 FastIoDispatch
->ReleaseFileForNtCreateSection
= VfatReleaseFileForNtCreateSection
;
804 FastIoDispatch
->FastIoDetachDevice
= VfatFastIoDetachDevice
;
805 FastIoDispatch
->FastIoQueryNetworkOpenInfo
= VfatFastIoQueryNetworkOpenInfo
;
806 FastIoDispatch
->MdlRead
= VfatMdlRead
;
807 FastIoDispatch
->MdlReadComplete
= VfatMdlReadComplete
;
808 FastIoDispatch
->PrepareMdlWrite
= VfatPrepareMdlWrite
;
809 FastIoDispatch
->MdlWriteComplete
= VfatMdlWriteComplete
;
810 FastIoDispatch
->FastIoReadCompressed
= VfatFastIoReadCompressed
;
811 FastIoDispatch
->FastIoWriteCompressed
= VfatFastIoWriteCompressed
;
812 FastIoDispatch
->MdlReadCompleteCompressed
= VfatMdlReadCompleteCompressed
;
813 FastIoDispatch
->MdlWriteCompleteCompressed
= VfatMdlWriteCompleteCompressed
;
814 FastIoDispatch
->FastIoQueryOpen
= VfatFastIoQueryOpen
;
815 FastIoDispatch
->AcquireForModWrite
= VfatAcquireForModWrite
;
816 FastIoDispatch
->ReleaseForModWrite
= VfatReleaseForModWrite
;
817 FastIoDispatch
->AcquireForCcFlush
= VfatAcquireForCcFlush
;
818 FastIoDispatch
->ReleaseForCcFlush
= VfatReleaseForCcFlush
;