https://git.reactos.org/?p=reactos.git;a=commitdiff;h=5f255827d3282b2dea1bc…
commit 5f255827d3282b2dea1bc6d5ba77607550742ced
Author: Pierre Schweitzer <pierre(a)reactos.org>
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