Multiple (hetero) display adapters in Vista

I can’t reply to an old thread so I start a new one.

The discussion seems to be very interesting to me, as I also wonder how heterogenous display adapter driver could be implemented in Vista.

What has been said sounds clear to me. However my question is how a proxy display driver can intercept calls to DxgkInitialize() from native drivers (to avoid multiple calls to Vista gfx kernel and to get native DxgkDDI function pointers).

Technically, how can that be done (apart from the fact it’s an ugly hack or not)?


From: Yossi Leybovich
Sent: Sunday, May 18, 2008 4:29 PM
To: Windows System Software Devs Interest List
Subject: RE: [ntdev] Multiple display adapter on VIsta


I don’t have the code of the AT/NVIDIA drivers nor I don’t want to depend on any
driver update
Do you think on generic way to intercept driver call to DxgInitialize
(other than the hacks I did)


From: [] On Behalf Of dhirendra
Sent: Sunday, May 18, 2008 1:52 PM
To: Windows System Software Devs Interest List
Subject: Re: [ntdev] Multiple display adapter on VIsta

I think there is no clean way to acheive this.
People who have done this is only via these not so ugly hacks.

If you can prevent other graphics driver from calling DxgInitialize and get its
Entry points then its possible to have 2 graphics adapter active.

Dhiren wrote:

I am trying to solve the following problem .
Vista disable the option to have 2 different display adapters , while I install
my second adapter driver I get the message that one of the driver disable.

Any idea how can I enable Vista to have 2 different display adapters ?

I implemented the following solution :
I created my own display driver that present itself to the system and hand it
(through the DxgkInitialize function) my entry point functions.
It loads when the system try to load the first display adapters (while the
system enumerate the bus)
During DxgkAddDevice function I load the right native driver (ATI or NVIDIA for
example) the device that the system actually enumerate.

Then for each call from dxgknI.sys I dispatch the call to the right driver .

| |
| MyDisplayDriver |
| |
| |
/ /

| | | |
| ATI driver | | NVIDIA driver |
|| ||

The problem with this solution is that it`s very trick and hacky , in order to
load the native drivers of the adapters I need to make sure that the driver will
not call DxgkInitialize (as it usual do …) because that when Vista disable it
And I also had to implement my own AdapterInfo function to load the right
UserMode driver (ATI or NVIDIA)
so I hack the function very ugly to redirect it to my function .

There are more hacks in this solution in order for it to work but I am looking
for clean solution does any one have any idea ?
Can I use the ViPN for representing 2 GPU adapters or its only of Monitors ? Can
the Vipn have hierarchy of few levels ?


If you want to intercept calls to DxgkInitialize() from native drivers, You can write a boot driver, In this driver you can hook DxgkInitialize, By the way, You should be start your driver before display driver.