Extract frame buffer on Windows 7.

Hi,
I am starter and would like to know how to extract frame buffer in Windows 7, in case of Windows XP(WDM architecture) we were able to get the frame buffer using filter driver. But I am not sure and did not find any API exposed which will help me to get the frame buffer.

In WDDM Win7 I want to know how to get the frame buffer for all display in single, dual or extended mode. From where we can get the frame buffer address pointers. If in case dont have accesses to Graphics driver code. Please suggest

Thanks,
Guna

xxxxx@yahoo.co.in wrote:

I am starter and would like to know how to extract frame buffer in Windows 7, in case of Windows XP(WDM architecture) we were able to get the frame buffer using filter driver. But I am not sure and did not find any API exposed which will help me to get the frame buffer.

Well, make sure you get the terminology correct. There has NEVER been
an API exposed to provide access to the live frame buffer. You could
write a mirror driver, but in that case you are maintaining your OWN
copy of the frame buffer. It’s not the live desktop.

In WDDM Win7 I want to know how to get the frame buffer for all display in single, dual or extended mode. From where we can get the frame buffer address pointers. If in case dont have accesses to Graphics driver code.

There is no supported mechanism for this. This is perhaps the single
largest remaining hole in the WDDM infrastructure. You can still do a
mirror driver, but that kills the fancy Aero Glass effects. Several
people have written drivers to “hook” the live WDDM driver to gain
backdoor access to the frame buffer, but that is delicate and unsupported.


Tim Roberts, xxxxx@probo.com
Providenza & Boekelheide, Inc.

Definitely delicate and unsupported.

However, only accessing other WDDM drivers’ live framebuffers is feasible (still a backdoor technique of course). Massive trouble only starts, when an additional display/monitor needs to be faked by a filter/hook driver (as typically done by USB display manufacturers).

Simple framebuffer access of existing displays can be done by hooking the WDDM Kernel Mode Driver’s DxgkDdiSetVidPnSourceAddress(…) and mapping the physical address correctly to virtual memory. Performance is an issue on non-Intel graphics adapters which have their frame buffers in on-board meomory of a their PCI adapters. In those cases, the frame buffer can often performantly be taken from hooked DxgkDdiAcquireSwizzlingRange(…).

During Aero Glass mode, the frame buffer keeps constantly changing (flipping). One way of obtaining it is in the hooked WDDM User Mode Driver from within the Present(…) DDI call with D3DDDI_PRESENTFLAGS Flip.

Marcel Ruedinger
datronicsoft