- Reference the file object in IopSecurityFile.
- Don't set FO_DIRECT_DEVICE_OPEN in IoCreateStreamFileObject.
- Disabled the setting of IRP_NOCACHE, because vfat cannot handle cached
and non cached requests for the same file.
- Set the correct device object in NtWriteFile.
Modified: trunk/reactos/ntoskrnl/io/file.c
_____
Modified: trunk/reactos/ntoskrnl/io/file.c
--- trunk/reactos/ntoskrnl/io/file.c 2005-05-17 18:04:23 UTC (rev
15380)
+++ trunk/reactos/ntoskrnl/io/file.c 2005-05-17 19:00:12 UTC (rev
15381)
@@ -344,6 +344,8 @@
StackPtr->Parameters.SetSecurity.SecurityDescriptor =
SecurityDescriptor;
}
+ ObReferenceObject(FileObject);
+
/* Call the Driver */
Status = IoCallDriver(FileObject->DeviceObject, Irp);
@@ -1022,8 +1024,8 @@
CreatedFileObject->Vpb = DeviceObject->Vpb;
CreatedFileObject->Type = IO_TYPE_FILE;
/* HACK */
- CreatedFileObject->Flags |= FO_DIRECT_DEVICE_OPEN;
- //CreatedFileObject->Flags = FO_STREAM_FILE;
+ //CreatedFileObject->Flags |= FO_DIRECT_DEVICE_OPEN;
+ CreatedFileObject->Flags |= FO_STREAM_FILE;
/* Initialize Lock and Event */
KeInitializeEvent(&CreatedFileObject->Event, NotificationEvent,
FALSE);
@@ -2536,7 +2538,12 @@
Irp->Overlay.AsynchronousParameters.UserApcRoutine = ApcRoutine;
Irp->Overlay.AsynchronousParameters.UserApcContext = ApcContext;
Irp->Flags |= IRP_READ_OPERATION;
+#if 0
+ /* FIXME:
+ * Vfat doesn't handle non cached files correctly.
+ */
if (FileObject->Flags & FO_NO_INTERMEDIATE_BUFFERING) Irp->Flags |=
IRP_NOCACHE;
+#endif
/* Setup Stack Data */
StackPtr = IoGetNextIrpStackLocation(Irp);
@@ -3114,7 +3121,7 @@
_SEH_TRY
{
Irp = IoBuildSynchronousFsdRequest(IRP_MJ_WRITE,
- FileObject->DeviceObject,
+ DeviceObject,
Buffer,
Length,
ByteOffset,
@@ -3148,7 +3155,12 @@
Irp->Overlay.AsynchronousParameters.UserApcRoutine = ApcRoutine;
Irp->Overlay.AsynchronousParameters.UserApcContext = ApcContext;
Irp->Flags |= IRP_WRITE_OPERATION;
+#if 0
+ /* FIXME:
+ * Vfat doesn't handle non cached files correctly.
+ */
if (FileObject->Flags & FO_NO_INTERMEDIATE_BUFFERING) Irp->Flags |=
IRP_NOCACHE;
+#endif
/* Setup Stack Data */
StackPtr = IoGetNextIrpStackLocation(Irp);