https://git.reactos.org/?p=reactos.git;a=commitdiff;h=5f255827d3282b2dea1bc6d5ba77607550742ced

commit 5f255827d3282b2dea1bc6d5ba77607550742ced
Author: Pierre Schweitzer <[email protected]>
AuthorDate: Sun Nov 12 21:16:31 2017 +0100

    [CDFS_NEW] Following 1bef487, add a hack and stub FastIO write routine to 
avoid bugchecks on write attempts.
    This allows booting the ReactOS LiveCD as HDD image in Qemu without issues 
:-)
---
 drivers/filesystems/cdfs_new/cdinit.c | 36 +++++++++++++++++++++++++++++++++++
 1 file changed, 36 insertions(+)

diff --git a/drivers/filesystems/cdfs_new/cdinit.c 
b/drivers/filesystems/cdfs_new/cdinit.c
index b6bec14c45..1f086fe61d 100755
--- a/drivers/filesystems/cdfs_new/cdinit.c
+++ b/drivers/filesystems/cdfs_new/cdinit.c
@@ -58,6 +58,29 @@ CdShutdown (
 #pragma alloc_text(INIT, CdInitializeGlobalData)
 #endif
 
+#ifdef __REACTOS__
+
+//
+// Stub for CcWrite, this is a hack
+//
+BOOLEAN
+NTAPI
+CdFastIoWrite (
+    IN PFILE_OBJECT FileObject,
+    IN PLARGE_INTEGER FileOffset,
+    IN ULONG Length,
+    IN BOOLEAN Wait,
+    IN ULONG LockKey,
+    IN PVOID Buffer,
+    OUT PIO_STATUS_BLOCK IoStatus,
+    IN PDEVICE_OBJECT DeviceObject)
+{
+    ASSERT(FALSE);
+    return FALSE;
+}
+
+#endif
+
 
 //
 //  Local support routine
@@ -342,6 +365,19 @@ Return Value:
     CdFastIoDispatch.SizeOfFastIoDispatch =    sizeof(FAST_IO_DISPATCH);
     CdFastIoDispatch.FastIoCheckIfPossible =   CdFastIoCheckIfPossible;  //  
CheckForFastIo
     CdFastIoDispatch.FastIoRead =              FsRtlCopyRead;            //  
Read
+#ifdef __REACTOS__
+
+    //
+    // Add a stub for CdFastIoWrite. This is a hack required because
+    // our current implementation of NtWriteFile won't validate
+    // access granted to files opened. And some applications may attempt
+    // to write to a file. In case it is cached, the kernel will 
null-dereference
+    // the fastIO routine, trying to call it.
+    // FIXME: remove once NtWriteFile got fixed!
+    //
+
+    CdFastIoDispatch.FastIoWrite =             CdFastIoWrite;            // 
Write
+#endif
     CdFastIoDispatch.FastIoQueryBasicInfo =    CdFastQueryBasicInfo;     //  
QueryBasicInfo
     CdFastIoDispatch.FastIoQueryStandardInfo = CdFastQueryStdInfo;       //  
QueryStandardInfo
     CdFastIoDispatch.FastIoLock =              CdFastLock;               //  
Lock

Reply via email to