[Bug 16911] New: WriteProcessMemory() not working for memory protected by X11DRV_DIB_DoProtectDIBSection()
wine-bugs at winehq.org
wine-bugs at winehq.org
Mon Jan 12 18:47:48 CST 2009
http://bugs.winehq.org/show_bug.cgi?id=16911
Summary: WriteProcessMemory() not working for memory protected by
X11DRV_DIB_DoProtectDIBSection()
Product: Wine
Version: 1.1.12
Platform: PC
OS/Version: Linux
Status: UNCONFIRMED
Keywords: patch, source
Severity: minor
Priority: P2
Component: winex11.drv
AssignedTo: wine-bugs at winehq.org
ReportedBy: thestig at google.com
Created an attachment (id=18660)
--> (http://bugs.winehq.org/attachment.cgi?id=18660)
test program
Hi, I have a test case here that works on WinXP but not Wine. I deliberately
wrote a standalone test case because I'm not sure which unit test to put it in.
It's in fact based off of dlls/kernel32/tests/virtual.c where the other
WriteProcessMemory() test is.
In this test case, we call CreateDIBSection() which returns a HBITMAP (hbitmap)
and some memory (mem). Next, we call SetDIBits() with hbitmap. We get into
X11DRV_SetDIBits(), where it calls X11DRV_DIB_Lock( physBitmap,
DIB_Status_GdiMod );.
This marks the memory (mem) as PAGE_NOACCESS, and leaves it in that state as
SetDIBts() returns. Normally if the process tries to access it, we get a page
fault that's handled by X11DRV_DIB_FaultHandler(), and everything works.
However, when the test code calls WriteProcessMemory(), we talk to wineserver
in NtWriteVirtualMemory(). In wine_server_call(), we do send_request(), where
writev() tries to read 'mem' and fails with EFAULT. This doesn't trigger
X11DRV_DIB_FaultHandler(), and WriteProcessMemory() fails.
--
Configure bugmail: http://bugs.winehq.org/userprefs.cgi?tab=email
Do not reply to this email, post in Bugzilla using the
above URL to reply.
------- You are receiving this mail because: -------
You are watching all bug changes.
More information about the wine-bugs
mailing list