diff --git a/reactos/drivers/fs/vfat/iface.c b/reactos/drivers/fs/vfat/iface.c index 1aed08d3bd9..311d7b7076b 100644 --- a/reactos/drivers/fs/vfat/iface.c +++ b/reactos/drivers/fs/vfat/iface.c @@ -49,7 +49,6 @@ DriverEntry(PDRIVER_OBJECT DriverObject, { PDEVICE_OBJECT DeviceObject; UNICODE_STRING DeviceName = RTL_CONSTANT_STRING(L"\\Fat"); - PFAST_IO_DISPATCH pFastIoDispatch; NTSTATUS Status; Status = IoCreateDevice(DriverObject, @@ -61,7 +60,23 @@ DriverEntry(PDRIVER_OBJECT DriverObject, &DeviceObject); if (!NT_SUCCESS(Status)) { - return (Status); + if (Status == STATUS_OBJECT_NAME_EXISTS || + Status == STATUS_OBJECT_NAME_COLLISION) + { + /* Try an other name, if 'Fat' is already in use. 'Fat' is also used by fastfat.sys on W2K */ + RtlInitUnicodeString(&DeviceName, L"\\RosFat"); + Status = IoCreateDevice(DriverObject, + sizeof(VFAT_GLOBAL_DATA), + &DeviceName, + FILE_DEVICE_DISK_FILE_SYSTEM, + 0, + FALSE, + &DeviceObject); + if (!NT_SUCCESS(Status)) + { + return (Status); + } + } } VfatGlobalData = DeviceObject->DeviceExtension; RtlZeroMemory (VfatGlobalData, sizeof(VFAT_GLOBAL_DATA)); @@ -95,9 +110,8 @@ DriverEntry(PDRIVER_OBJECT DriverObject, VfatGlobalData->CacheMgrCallbacks.ReleaseFromReadAhead = VfatReleaseFromReadAhead; /* Fast I/O */ - DriverObject->FastIoDispatch = pFastIoDispatch = &VfatGlobalData->FastIoDispatch; - pFastIoDispatch->SizeOfFastIoDispatch = sizeof(FAST_IO_DISPATCH); - pFastIoDispatch->FastIoCheckIfPossible = VfatFastIoCheckIfPossible; + VfatInitFastIoRoutines(&VfatGlobalData->FastIoDispatch); + DriverObject->FastIoDispatch = &VfatGlobalData->FastIoDispatch; /* Private lists */ ExInitializeNPagedLookasideList(&VfatGlobalData->FcbLookasideList, diff --git a/reactos/drivers/fs/vfat/vfat.h b/reactos/drivers/fs/vfat/vfat.h index 48bf396221e..7f14a207daa 100644 --- a/reactos/drivers/fs/vfat/vfat.h +++ b/reactos/drivers/fs/vfat/vfat.h @@ -511,15 +511,8 @@ NTSTATUS VfatCleanup (PVFAT_IRP_CONTEXT IrpContext); /* --------------------------------------------------------- fastio.c */ -BOOLEAN NTAPI -VfatFastIoCheckIfPossible(IN PFILE_OBJECT FileObject, - IN PLARGE_INTEGER FileOffset, - IN ULONG Lenght, - IN BOOLEAN Wait, - IN ULONG LockKey, - IN BOOLEAN CheckForReadOperation, - OUT PIO_STATUS_BLOCK IoStatus, - IN PDEVICE_OBJECT DeviceObject); +VOID +VfatInitFastIoRoutines(PFAST_IO_DISPATCH FastIoDispatch); BOOLEAN NTAPI VfatAcquireForLazyWrite(IN PVOID Context,