diff --git a/src/sys/driver.h b/src/sys/driver.h index 3ebe8442..1ed4a19f 100644 --- a/src/sys/driver.h +++ b/src/sys/driver.h @@ -1139,12 +1139,10 @@ BOOLEAN FspWriteIrpShouldUseProcessBuffer(PIRP Irp, SIZE_T BufferSize) { ASSERT(0 != Irp); #if DBG - return DEBUGTEST(50) || + return DEBUGTEST(50); #else - return FspProcessBufferSizeMax >= BufferSize || + return FspProcessBufferSizeMax >= BufferSize; #endif - FspFsvolDeviceExtension(IoGetCurrentIrpStackLocation(Irp)->DeviceObject)-> - VolumeParams.AlwaysUseDoubleBuffering; } static inline BOOLEAN FspQueryDirectoryIrpShouldUseProcessBuffer(PIRP Irp, SIZE_T BufferSize) diff --git a/src/sys/volume.c b/src/sys/volume.c index 2bca90d4..d9aacce9 100644 --- a/src/sys/volume.c +++ b/src/sys/volume.c @@ -171,6 +171,16 @@ static NTSTATUS FspVolumeCreateNoLock( } VolumeParams.FileSystemName[sizeof VolumeParams.FileSystemName / sizeof(WCHAR) - 1] = L'\0'; +#if !DBG + /* + * In Release builds we hardcode AlwaysUseDoubleBuffering for Reads as we do not want someone + * to use WinFsp to crash Windows. + * + * See http://www.osronline.com/showthread.cfm?link=282037 + */ + VolumeParams.AlwaysUseDoubleBuffering = 1; +#endif + /* create volume guid */ Result = FspCreateGuid(&Guid); if (!NT_SUCCESS(Result))