- Implement locking for Cc flush (the one used in NT5.2 results in a hang, might be because of a misused PagingIoResource).

- If an acquire/release operation is not implemented, FSD must return STATUS_INVALID_DEVICE_REQUEST, not some other error code.
- Fix a typo in the debug message.

svn path=/trunk/; revision=36731
This commit is contained in:
Aleksey Bragin
2008-10-12 09:34:29 +00:00
parent 43dc41bad7
commit 65bfc45d55
2 changed files with 23 additions and 5 deletions
+1 -1
View File
@@ -198,7 +198,7 @@ FindFile (
DPRINT ("FindFile(Parent %p, FileToFind '%wZ', DirIndex: %d)\n",
Parent, FileToFindU, DirContext->DirIndex);
DPRINT ("FindFile: Path %wZ)\n",&Parent->PathNameU);
DPRINT ("FindFile: Path %wZ\n",&Parent->PathNameU);
PathNameBufferLength = LONGNAME_MAX_LENGTH * sizeof(WCHAR);
PathNameBuffer = ExAllocatePoolWithTag(NonPagedPool, PathNameBufferLength + sizeof(WCHAR), TAG_VFAT);
+22 -4
View File
@@ -175,7 +175,7 @@ VfatAcquireForModWrite(IN PFILE_OBJECT FileObject,
IN PDEVICE_OBJECT DeviceObject)
{
DPRINT("VfatAcquireForModWrite\n");
return STATUS_UNSUCCESSFUL;
return STATUS_INVALID_DEVICE_REQUEST;
}
static BOOLEAN NTAPI
@@ -296,16 +296,34 @@ static NTSTATUS NTAPI
VfatAcquireForCcFlush(IN PFILE_OBJECT FileObject,
IN PDEVICE_OBJECT DeviceObject)
{
PVFATFCB Fcb = (PVFATFCB)FileObject->FsContext;
DPRINT("VfatAcquireForCcFlush\n");
return STATUS_INVALID_DEVICE_REQUEST;
/* Make sure it is not a volume lock */
ASSERT(!(Fcb->Flags & FCB_IS_VOLUME));
/* Acquire the resource */
ExAcquireResourceExclusiveLite(&(Fcb->MainResource), TRUE);
return STATUS_SUCCESS;
}
static NTSTATUS NTAPI
VfatReleaseForCcFlush(IN PFILE_OBJECT FileObject,
IN PDEVICE_OBJECT DeviceObject)
{
PVFATFCB Fcb = (PVFATFCB)FileObject->FsContext;
DPRINT("VfatReleaseForCcFlush\n");
return STATUS_INVALID_DEVICE_REQUEST;
/* Make sure it is not a volume lock */
ASSERT(!(Fcb->Flags & FCB_IS_VOLUME));
/* Release the resource */
ExReleaseResourceLite(&(Fcb->MainResource));
return STATUS_SUCCESS;
}
BOOLEAN NTAPI
@@ -378,7 +396,6 @@ VfatInitFastIoRoutines(PFAST_IO_DISPATCH FastIoDispatch)
FastIoDispatch->ReleaseFileForNtCreateSection = VfatReleaseFileForNtCreateSection;
FastIoDispatch->FastIoDetachDevice = VfatFastIoDetachDevice;
FastIoDispatch->FastIoQueryNetworkOpenInfo = VfatFastIoQueryNetworkOpenInfo;
FastIoDispatch->AcquireForModWrite = VfatAcquireForModWrite;
FastIoDispatch->MdlRead = VfatMdlRead;
FastIoDispatch->MdlReadComplete = VfatMdlReadComplete;
FastIoDispatch->PrepareMdlWrite = VfatPrepareMdlWrite;
@@ -388,6 +405,7 @@ VfatInitFastIoRoutines(PFAST_IO_DISPATCH FastIoDispatch)
FastIoDispatch->MdlReadCompleteCompressed = VfatMdlReadCompleteCompressed;
FastIoDispatch->MdlWriteCompleteCompressed = VfatMdlWriteCompleteCompressed;
FastIoDispatch->FastIoQueryOpen = VfatFastIoQueryOpen;
FastIoDispatch->AcquireForModWrite = VfatAcquireForModWrite;
FastIoDispatch->ReleaseForModWrite = VfatReleaseForModWrite;
FastIoDispatch->AcquireForCcFlush = VfatAcquireForCcFlush;
FastIoDispatch->ReleaseForCcFlush = VfatReleaseForCcFlush;