mirror of
https://github.com/reactos/reactos.git
synced 2024-10-04 16:36:11 +00:00
- Implemented dummy stubs for all fast io entry points. W2K does ignore the IsFastIoPossible variable of the fcb.
- Fixed the directory index of a file for FATX. svn path=/trunk/; revision=13279
This commit is contained in:
parent
c25206e880
commit
81ddc4aa52
|
@ -1,4 +1,4 @@
|
||||||
/* $Id:
|
/* $Id$
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
* FILE: drivers/fs/vfat/fastio.c
|
* FILE: drivers/fs/vfat/fastio.c
|
||||||
|
@ -6,12 +6,13 @@
|
||||||
* COPYRIGHT: See COPYING in the top level directory
|
* COPYRIGHT: See COPYING in the top level directory
|
||||||
* PROJECT: ReactOS kernel
|
* PROJECT: ReactOS kernel
|
||||||
* PROGRAMMER: Herve Poussineau (reactos@poussine.freesurf.fr)
|
* PROGRAMMER: Herve Poussineau (reactos@poussine.freesurf.fr)
|
||||||
|
* Hartmut Birr
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define NDEBUG
|
#define NDEBUG
|
||||||
#include "vfat.h"
|
#include "vfat.h"
|
||||||
|
|
||||||
BOOLEAN NTAPI
|
BOOLEAN STDCALL
|
||||||
VfatFastIoCheckIfPossible(IN PFILE_OBJECT FileObject,
|
VfatFastIoCheckIfPossible(IN PFILE_OBJECT FileObject,
|
||||||
IN PLARGE_INTEGER FileOffset,
|
IN PLARGE_INTEGER FileOffset,
|
||||||
IN ULONG Lenght,
|
IN ULONG Lenght,
|
||||||
|
@ -26,7 +27,291 @@ VfatFastIoCheckIfPossible(IN PFILE_OBJECT FileObject,
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
BOOLEAN NTAPI
|
BOOLEAN STDCALL
|
||||||
|
VfatFastIoRead(IN PFILE_OBJECT FileObject,
|
||||||
|
IN PLARGE_INTEGER FileOffset,
|
||||||
|
IN ULONG Length,
|
||||||
|
IN BOOLEAN Wait,
|
||||||
|
IN ULONG LockKey,
|
||||||
|
OUT PVOID Buffer,
|
||||||
|
OUT PIO_STATUS_BLOCK IoStatus,
|
||||||
|
IN PDEVICE_OBJECT DeviceObject)
|
||||||
|
{
|
||||||
|
DPRINT("VfatFastIoRead()\n");
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOLEAN STDCALL
|
||||||
|
VfatFastIoWrite(IN PFILE_OBJECT FileObject,
|
||||||
|
IN PLARGE_INTEGER FileOffset,
|
||||||
|
IN ULONG Length,
|
||||||
|
IN BOOLEAN Wait,
|
||||||
|
IN ULONG LockKey,
|
||||||
|
OUT PVOID Buffer,
|
||||||
|
OUT PIO_STATUS_BLOCK IoStatus,
|
||||||
|
IN PDEVICE_OBJECT DeviceObject)
|
||||||
|
{
|
||||||
|
DPRINT("VfatFastIoWrite()\n");
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOLEAN STDCALL
|
||||||
|
VfatFastIoQueryBasicInfo(IN PFILE_OBJECT FileObject,
|
||||||
|
IN BOOLEAN Wait,
|
||||||
|
OUT PFILE_BASIC_INFORMATION Buffer,
|
||||||
|
OUT PIO_STATUS_BLOCK IoStatus,
|
||||||
|
IN PDEVICE_OBJECT DeviceObject)
|
||||||
|
{
|
||||||
|
DPRINT("VfatFastIoQueryBasicInfo()\n");
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOLEAN STDCALL
|
||||||
|
VfatFastIoQueryStandardInfo(IN PFILE_OBJECT FileObject,
|
||||||
|
IN BOOLEAN Wait,
|
||||||
|
OUT PFILE_STANDARD_INFORMATION Buffer,
|
||||||
|
OUT PIO_STATUS_BLOCK IoStatus,
|
||||||
|
IN PDEVICE_OBJECT DeviceObject)
|
||||||
|
{
|
||||||
|
DPRINT("VfatFastIoQueryStandardInfo\n");
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOLEAN STDCALL
|
||||||
|
VfatFastIoLock(IN PFILE_OBJECT FileObject,
|
||||||
|
IN PLARGE_INTEGER FileOffset,
|
||||||
|
IN PLARGE_INTEGER Length,
|
||||||
|
PEPROCESS ProcessId,
|
||||||
|
ULONG Key,
|
||||||
|
BOOLEAN FailImmediately,
|
||||||
|
BOOLEAN ExclusiveLock,
|
||||||
|
OUT PIO_STATUS_BLOCK IoStatus,
|
||||||
|
IN PDEVICE_OBJECT DeviceObject)
|
||||||
|
{
|
||||||
|
DPRINT("VfatFastIoLock\n");
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOLEAN STDCALL
|
||||||
|
VfatFastIoUnlockSingle(IN PFILE_OBJECT FileObject,
|
||||||
|
IN PLARGE_INTEGER FileOffset,
|
||||||
|
IN PLARGE_INTEGER Length,
|
||||||
|
PEPROCESS ProcessId,
|
||||||
|
ULONG Key,
|
||||||
|
OUT PIO_STATUS_BLOCK IoStatus,
|
||||||
|
IN PDEVICE_OBJECT DeviceObject)
|
||||||
|
{
|
||||||
|
DPRINT("VfatFastIoUnlockSingle\n");
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOLEAN STDCALL
|
||||||
|
VfatFastIoUnlockAll(IN PFILE_OBJECT FileObject,
|
||||||
|
PEPROCESS ProcessId,
|
||||||
|
OUT PIO_STATUS_BLOCK IoStatus,
|
||||||
|
IN PDEVICE_OBJECT DeviceObject)
|
||||||
|
{
|
||||||
|
DPRINT("VfatFastIoUnlockAll\n");
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOLEAN STDCALL
|
||||||
|
VfatFastIoUnlockAllByKey(IN PFILE_OBJECT FileObject,
|
||||||
|
PEPROCESS ProcessId,
|
||||||
|
ULONG Key,
|
||||||
|
OUT PIO_STATUS_BLOCK IoStatus,
|
||||||
|
IN PDEVICE_OBJECT DeviceObject)
|
||||||
|
{
|
||||||
|
DPRINT("VfatFastIoUnlockAllByKey\n");
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOLEAN STDCALL
|
||||||
|
VfatFastIoDeviceControl(IN PFILE_OBJECT FileObject,
|
||||||
|
IN BOOLEAN Wait,
|
||||||
|
IN PVOID InputBuffer OPTIONAL,
|
||||||
|
IN ULONG InputBufferLength,
|
||||||
|
OUT PVOID OutputBuffer OPTIONAL,
|
||||||
|
IN ULONG OutputBufferLength,
|
||||||
|
IN ULONG IoControlCode,
|
||||||
|
OUT PIO_STATUS_BLOCK IoStatus,
|
||||||
|
IN PDEVICE_OBJECT DeviceObject)
|
||||||
|
{
|
||||||
|
DPRINT("VfatFastIoDeviceControl\n");
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
VOID STDCALL
|
||||||
|
VfatAcquireFileForNtCreateSection(IN PFILE_OBJECT FileObject)
|
||||||
|
{
|
||||||
|
DPRINT("VfatAcquireFileForNtCreateSection\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
VOID STDCALL
|
||||||
|
VfatReleaseFileForNtCreateSection(IN PFILE_OBJECT FileObject)
|
||||||
|
{
|
||||||
|
DPRINT("VfatReleaseFileForNtCreateSection\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
VOID STDCALL
|
||||||
|
VfatFastIoDetachDevice(IN PDEVICE_OBJECT SourceDevice,
|
||||||
|
IN PDEVICE_OBJECT TargetDevice)
|
||||||
|
{
|
||||||
|
DPRINT("VfatFastIoDetachDevice\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOLEAN STDCALL
|
||||||
|
VfatFastIoQueryNetworkOpenInfo(IN PFILE_OBJECT FileObject,
|
||||||
|
IN BOOLEAN Wait,
|
||||||
|
OUT PFILE_NETWORK_OPEN_INFORMATION Buffer,
|
||||||
|
OUT PIO_STATUS_BLOCK IoStatus,
|
||||||
|
IN PDEVICE_OBJECT DeviceObject)
|
||||||
|
{
|
||||||
|
DPRINT("VfatFastIoQueryNetworkOpenInfo\n");
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
NTSTATUS STDCALL
|
||||||
|
VfatAcquireForModWrite(IN PFILE_OBJECT FileObject,
|
||||||
|
IN PLARGE_INTEGER EndingOffset,
|
||||||
|
OUT PERESOURCE* ResourceToRelease,
|
||||||
|
IN PDEVICE_OBJECT DeviceObject)
|
||||||
|
{
|
||||||
|
DPRINT("VfatAcquireForModWrite\n");
|
||||||
|
return STATUS_UNSUCCESSFUL;
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOLEAN STDCALL
|
||||||
|
VfatMdlRead(IN PFILE_OBJECT FileObject,
|
||||||
|
IN PLARGE_INTEGER FileOffset,
|
||||||
|
IN ULONG Length,
|
||||||
|
IN ULONG LockKey,
|
||||||
|
OUT PMDL* MdlChain,
|
||||||
|
OUT PIO_STATUS_BLOCK IoStatus,
|
||||||
|
IN PDEVICE_OBJECT DeviceObject)
|
||||||
|
{
|
||||||
|
DPRINT("VfatMdlRead\n");
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOLEAN STDCALL
|
||||||
|
VfatMdlReadComplete(IN PFILE_OBJECT FileObject,
|
||||||
|
IN PMDL MdlChain,
|
||||||
|
IN PDEVICE_OBJECT DeviceObject)
|
||||||
|
{
|
||||||
|
DPRINT("VfatMdlReadComplete\n");
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOLEAN STDCALL
|
||||||
|
VfatPrepareMdlWrite(IN PFILE_OBJECT FileObject,
|
||||||
|
IN PLARGE_INTEGER FileOffset,
|
||||||
|
IN ULONG Length,
|
||||||
|
IN ULONG LockKey,
|
||||||
|
OUT PMDL* MdlChain,
|
||||||
|
OUT PIO_STATUS_BLOCK IoStatus,
|
||||||
|
IN PDEVICE_OBJECT DeviceObject)
|
||||||
|
{
|
||||||
|
DPRINT("VfatPrepareMdlWrite\n");
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOLEAN STDCALL
|
||||||
|
VfatMdlWriteComplete(IN PFILE_OBJECT FileObject,
|
||||||
|
IN PLARGE_INTEGER FileOffset,
|
||||||
|
IN PMDL MdlChain,
|
||||||
|
IN PDEVICE_OBJECT DeviceObject)
|
||||||
|
{
|
||||||
|
DPRINT("VfatMdlWriteComplete\n");
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOLEAN STDCALL
|
||||||
|
VfatFastIoReadCompressed(IN PFILE_OBJECT FileObject,
|
||||||
|
IN PLARGE_INTEGER FileOffset,
|
||||||
|
IN ULONG Length,
|
||||||
|
IN ULONG LockKey,
|
||||||
|
OUT PVOID Buffer,
|
||||||
|
OUT PMDL* MdlChain,
|
||||||
|
OUT PIO_STATUS_BLOCK IoStatus,
|
||||||
|
OUT PCOMPRESSED_DATA_INFO CompressedDataInfo,
|
||||||
|
IN ULONG CompressedDataInfoLength,
|
||||||
|
IN PDEVICE_OBJECT DeviceObject)
|
||||||
|
{
|
||||||
|
DPRINT("VfatFastIoReadCompressed\n");
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOLEAN STDCALL
|
||||||
|
VfatFastIoWriteCompressed(IN PFILE_OBJECT FileObject,
|
||||||
|
IN PLARGE_INTEGER FileOffset,
|
||||||
|
IN ULONG Length,
|
||||||
|
IN ULONG LockKey,
|
||||||
|
IN PVOID Buffer,
|
||||||
|
OUT PMDL* MdlChain,
|
||||||
|
OUT PIO_STATUS_BLOCK IoStatus,
|
||||||
|
IN PCOMPRESSED_DATA_INFO CompressedDataInfo,
|
||||||
|
IN ULONG CompressedDataInfoLength,
|
||||||
|
IN PDEVICE_OBJECT DeviceObject)
|
||||||
|
{
|
||||||
|
DPRINT("VfatFastIoWriteCompressed\n");
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOLEAN STDCALL
|
||||||
|
VfatMdlReadCompleteCompressed(IN PFILE_OBJECT FileObject,
|
||||||
|
IN PMDL MdlChain,
|
||||||
|
IN PDEVICE_OBJECT DeviceObject)
|
||||||
|
{
|
||||||
|
DPRINT("VfatMdlReadCompleteCompressed\n");
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOLEAN STDCALL
|
||||||
|
VfatMdlWriteCompleteCompressed(IN PFILE_OBJECT FileObject,
|
||||||
|
IN PLARGE_INTEGER FileOffset,
|
||||||
|
IN PMDL MdlChain,
|
||||||
|
IN PDEVICE_OBJECT DeviceObject)
|
||||||
|
{
|
||||||
|
DPRINT("VfatMdlWriteCompleteCompressed\n");
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOLEAN STDCALL
|
||||||
|
VfatFastIoQueryOpen(IN PIRP Irp,
|
||||||
|
OUT PFILE_NETWORK_OPEN_INFORMATION NetworkInformation,
|
||||||
|
IN PDEVICE_OBJECT DeviceObject)
|
||||||
|
{
|
||||||
|
DPRINT("VfatFastIoQueryOpen\n");
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
NTSTATUS STDCALL
|
||||||
|
VfatReleaseForModWrite(IN PFILE_OBJECT FileObject,
|
||||||
|
IN PERESOURCE ResourceToRelease,
|
||||||
|
IN PDEVICE_OBJECT DeviceObject)
|
||||||
|
{
|
||||||
|
DPRINT("VfatReleaseForModWrite\n");
|
||||||
|
return STATUS_UNSUCCESSFUL;
|
||||||
|
}
|
||||||
|
|
||||||
|
NTSTATUS STDCALL
|
||||||
|
VfatAcquireForCcFlush(IN PFILE_OBJECT FileObject,
|
||||||
|
IN PDEVICE_OBJECT DeviceObject)
|
||||||
|
{
|
||||||
|
DPRINT("VfatAcquireForCcFlush\n");
|
||||||
|
return STATUS_UNSUCCESSFUL;
|
||||||
|
}
|
||||||
|
|
||||||
|
NTSTATUS STDCALL
|
||||||
|
VfatReleaseForCcFlush(IN PFILE_OBJECT FileObject,
|
||||||
|
IN PDEVICE_OBJECT DeviceObject)
|
||||||
|
{
|
||||||
|
DPRINT("VfatReleaseForCcFlush\n");
|
||||||
|
return STATUS_UNSUCCESSFUL;
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOLEAN STDCALL
|
||||||
VfatAcquireForLazyWrite(IN PVOID Context,
|
VfatAcquireForLazyWrite(IN PVOID Context,
|
||||||
IN BOOLEAN Wait)
|
IN BOOLEAN Wait)
|
||||||
{
|
{
|
||||||
|
@ -42,7 +327,7 @@ VfatAcquireForLazyWrite(IN PVOID Context,
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
VOID NTAPI
|
VOID STDCALL
|
||||||
VfatReleaseFromLazyWrite(IN PVOID Context)
|
VfatReleaseFromLazyWrite(IN PVOID Context)
|
||||||
{
|
{
|
||||||
PVFATFCB Fcb = (PVFATFCB)Context;
|
PVFATFCB Fcb = (PVFATFCB)Context;
|
||||||
|
@ -52,7 +337,7 @@ VfatReleaseFromLazyWrite(IN PVOID Context)
|
||||||
ExReleaseResourceLite(&(Fcb->MainResource));
|
ExReleaseResourceLite(&(Fcb->MainResource));
|
||||||
}
|
}
|
||||||
|
|
||||||
BOOLEAN NTAPI
|
BOOLEAN STDCALL
|
||||||
VfatAcquireForReadAhead(IN PVOID Context,
|
VfatAcquireForReadAhead(IN PVOID Context,
|
||||||
IN BOOLEAN Wait)
|
IN BOOLEAN Wait)
|
||||||
{
|
{
|
||||||
|
@ -68,7 +353,7 @@ VfatAcquireForReadAhead(IN PVOID Context,
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
VOID NTAPI
|
VOID STDCALL
|
||||||
VfatReleaseFromReadAhead(IN PVOID Context)
|
VfatReleaseFromReadAhead(IN PVOID Context)
|
||||||
{
|
{
|
||||||
PVFATFCB Fcb = (PVFATFCB)Context;
|
PVFATFCB Fcb = (PVFATFCB)Context;
|
||||||
|
@ -77,3 +362,38 @@ VfatReleaseFromReadAhead(IN PVOID Context)
|
||||||
|
|
||||||
ExReleaseResourceLite(&(Fcb->MainResource));
|
ExReleaseResourceLite(&(Fcb->MainResource));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
VOID
|
||||||
|
VfatInitFastIoRoutines(PFAST_IO_DISPATCH FastIoDispatch)
|
||||||
|
{
|
||||||
|
FastIoDispatch->SizeOfFastIoDispatch = sizeof(FAST_IO_DISPATCH);
|
||||||
|
FastIoDispatch->FastIoCheckIfPossible = VfatFastIoCheckIfPossible;
|
||||||
|
FastIoDispatch->FastIoRead = VfatFastIoRead;
|
||||||
|
FastIoDispatch->FastIoWrite = VfatFastIoWrite;
|
||||||
|
FastIoDispatch->FastIoQueryBasicInfo = VfatFastIoQueryBasicInfo;
|
||||||
|
FastIoDispatch->FastIoQueryStandardInfo = VfatFastIoQueryStandardInfo;
|
||||||
|
FastIoDispatch->FastIoLock = VfatFastIoLock;
|
||||||
|
FastIoDispatch->FastIoUnlockSingle = VfatFastIoUnlockSingle;
|
||||||
|
FastIoDispatch->FastIoUnlockAll = VfatFastIoUnlockAll;
|
||||||
|
FastIoDispatch->FastIoUnlockAllByKey = VfatFastIoUnlockAllByKey;
|
||||||
|
FastIoDispatch->FastIoDeviceControl = VfatFastIoDeviceControl;
|
||||||
|
FastIoDispatch->AcquireFileForNtCreateSection = VfatAcquireFileForNtCreateSection;
|
||||||
|
FastIoDispatch->ReleaseFileForNtCreateSection = VfatReleaseFileForNtCreateSection;
|
||||||
|
FastIoDispatch->FastIoDetachDevice = VfatFastIoDetachDevice;
|
||||||
|
FastIoDispatch->FastIoQueryNetworkOpenInfo = VfatFastIoQueryNetworkOpenInfo;
|
||||||
|
FastIoDispatch->AcquireForModWrite = VfatAcquireForModWrite;
|
||||||
|
FastIoDispatch->MdlRead = VfatMdlRead;
|
||||||
|
FastIoDispatch->MdlReadComplete = VfatMdlReadComplete;
|
||||||
|
FastIoDispatch->PrepareMdlWrite = VfatPrepareMdlWrite;
|
||||||
|
FastIoDispatch->MdlWriteComplete = VfatMdlWriteComplete;
|
||||||
|
FastIoDispatch->FastIoReadCompressed = VfatFastIoReadCompressed;
|
||||||
|
FastIoDispatch->FastIoWriteCompressed = VfatFastIoWriteCompressed;
|
||||||
|
FastIoDispatch->MdlReadCompleteCompressed = VfatMdlReadCompleteCompressed;
|
||||||
|
FastIoDispatch->MdlWriteCompleteCompressed = VfatMdlWriteCompleteCompressed;
|
||||||
|
FastIoDispatch->FastIoQueryOpen = VfatFastIoQueryOpen;
|
||||||
|
FastIoDispatch->ReleaseForModWrite = VfatReleaseForModWrite;
|
||||||
|
FastIoDispatch->AcquireForCcFlush = VfatAcquireForCcFlush;
|
||||||
|
FastIoDispatch->ReleaseForCcFlush = VfatReleaseForCcFlush;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue