[ros-diffs] [pschweitzer] 50958: [FASTFAT] - Prevent code duplication by using vfatAttachFCBToFileObject() for volume opening, instead of rewritting the whole function. - Properly check requested disposition w...

pschweitzer at svn.reactos.org pschweitzer at svn.reactos.org
Wed Mar 2 21:51:34 UTC 2011


Author: pschweitzer
Date: Wed Mar  2 21:51:33 2011
New Revision: 50958

URL: http://svn.reactos.org/svn/reactos?rev=50958&view=rev
Log:
[FASTFAT]
- Prevent code duplication by using vfatAttachFCBToFileObject() for volume opening, instead of rewritting the whole function.
- Properly check requested disposition when opening a volume.
This fixes bug #5839. Trying to exec \\.\C: in explorer run dialog now ends with an error, as it does on Windows.

Modified:
    trunk/reactos/drivers/filesystems/fastfat/create.c

Modified: trunk/reactos/drivers/filesystems/fastfat/create.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/filesystems/fastfat/create.c?rev=50958&r1=50957&r2=50958&view=diff
==============================================================================
--- trunk/reactos/drivers/filesystems/fastfat/create.c [iso-8859-1] (original)
+++ trunk/reactos/drivers/filesystems/fastfat/create.c [iso-8859-1] Wed Mar  2 21:51:33 2011
@@ -433,7 +433,6 @@
 	NTSTATUS Status = STATUS_SUCCESS;
 	PDEVICE_EXTENSION DeviceExt;
 	ULONG RequestedDisposition, RequestedOptions;
-	PVFATCCB pCcb;
 	PVFATFCB pFcb = NULL;
 	PVFATFCB ParentFcb = NULL;
 	PWCHAR c, last;
@@ -468,9 +467,8 @@
 	if (FileObject->FileName.Length == 0 &&
 		(FileObject->RelatedFileObject == NULL || FileObject->RelatedFileObject->FsContext2 != NULL))
 	{
-		if (RequestedDisposition == FILE_CREATE ||
-			RequestedDisposition == FILE_OVERWRITE_IF ||
-			RequestedDisposition == FILE_SUPERSEDE)
+		if (RequestedDisposition != FILE_OPEN ||
+			RequestedDisposition != FILE_OPEN_IF)
 		{
 			return(STATUS_ACCESS_DENIED);
 		}
@@ -481,16 +479,9 @@
 			return(STATUS_NOT_A_DIRECTORY);
 		}
 #endif
+
 		pFcb = DeviceExt->VolumeFcb;
-		pCcb = ExAllocateFromNPagedLookasideList(&VfatGlobalData->CcbLookasideList);
-		if (pCcb == NULL)
-		{
-			return (STATUS_INSUFFICIENT_RESOURCES);
-		}
-		RtlZeroMemory(pCcb, sizeof(VFATCCB));
-		FileObject->SectionObjectPointer = &pFcb->SectionObjectPointers;
-		FileObject->FsContext = pFcb;
-		FileObject->FsContext2 = pCcb;
+		vfatAttachFCBToFileObject(DeviceExt, pFcb, FileObject);
 		pFcb->RefCount++;
 
 		Irp->IoStatus.Information = FILE_OPENED;




More information about the Ros-diffs mailing list