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