Work around a problem where WriteFile is asked to write memory
protected by DIBSection code.
diff --git a/dlls/kernel/file.c b/dlls/kernel/file.c
index 5242885..2e4efd9 100644
--- a/dlls/kernel/file.c
+++ b/dlls/kernel/file.c
@@ -451,6 +451,16 @@
status = NtWriteFile(hFile, hEvent, NULL, NULL, piosb,
buffer, bytesToWrite, poffset, NULL);
+ /* FIXME: NtWriteFile does not always cause page faults, generate them now */
+ if (status == STATUS_INVALID_USER_BUFFER && !IsBadReadPtr( buffer, bytesToWrite ))
+ {
+ status = NtWriteFile(hFile, hEvent, NULL, NULL, piosb,
+ buffer, bytesToWrite, poffset, NULL);
+ if (status != STATUS_INVALID_USER_BUFFER)
+ FIXME("Could not access memory (%p,%ld) at first, now OK. Protected by DIBSection code?\n",
+ buffer, bytesToWrite);
+ }
+
if (status != STATUS_PENDING && bytesWritten)
*bytesWritten = piosb->Information;