Hi All,
I am writing a mirror display driver using the DDK sample as base.
I am transferring the drawing information to a user mode application.
The drawing information contains information about the type of operation
The change RECT and the actual video memory data.
It seems to me that the most efficient way to communicate the actual video
memory data is to gain direct access to the video frame buffer(similar to
the DirectX way).
But I couldn’t find information on how to access the video frame buffer from
a
mirror device.
Are you supposed to copy the data to your own frame buffer(seems like a
waste of
additional copy) or get direct access to the video frame buffer and map it
to user mode address
space?
I would appreciate any information on the subject.
Thank you,
Hermos
I developed a mirror driver just like you are discribing. In fact it is
exactly like the vnc mirror driver. Note that vnc is a supposedly open
source for sending screens over the network. Note I said supposedly because
mirror driver source is not open. But alas I developed it for a supposed
friend.
Note that what I developed also works in windows 98 by using the
accessibility features of windows 98. I will describe what you need for
copied the screen.
Yes Direct Draw is one way. The other is that you can do the functionality
of Direct Draw in you miniport driver if you wish. You can than add an
Ioctl to you display driver that will then call the video miniport. Note in
the miniport you want to use VideoPortMapMemory(). This is map the
FrameBuffer with page table entries that all processes can then access.
This is equilivalent to using the Direct Draw features.
Curious why do you need to know this?
Sincerely;
Michael Jones
“Hermos” wrote in message news:xxxxx@ntdev…
> Hi All,
>
> I am writing a mirror display driver using the DDK sample as base.
>
> I am transferring the drawing information to a user mode application.
>
> The drawing information contains information about the type of operation
>
> The change RECT and the actual video memory data.
>
>
> It seems to me that the most efficient way to communicate the actual video
> memory data is to gain direct access to the video frame buffer(similar to
> the DirectX way).
>
> But I couldn’t find information on how to access the video frame buffer
from
> a
> mirror device.
>
> Are you supposed to copy the data to your own frame buffer(seems like a
> waste of
> additional copy) or get direct access to the video frame buffer and map it
> to user mode address
> space?
>
> I would appreciate any information on the subject.
>
> Thank you,
>
> Hermos
>
>
>
>
Hi Michael,
Thank you for your reply.
I tried to use VideoPortMapMemory but the second parameter needs
PhysicalAddress (bus-relative base address of the range to be mapped).
I noticed that in the DDK samples where they use this function, a real
physical device uses
Its own configuration to obtain this address.
How can I obtain the device configuration in a mirror mini driver which is
not a real device
And does not have any hardware associated with it ?.
I also tried calling IOCTL_VIDEO_MAP_VIDEO_MEMORY from the display driver
But it only seems to call my mini driver and does not get
duplicated/mirrored into the real mini driver.
I am trying to do this because when I only transfer the changes with out the
real data
To a user mode app the blits are very slow.
“Michael Jones” wrote in message
news:xxxxx@ntdev…
> I developed a mirror driver just like you are discribing. In fact it is
> exactly like the vnc mirror driver. Note that vnc is a supposedly open
> source for sending screens over the network. Note I said supposedly
because
> mirror driver source is not open. But alas I developed it for a supposed
> friend.
>
> Note that what I developed also works in windows 98 by using the
> accessibility features of windows 98. I will describe what you need for
> copied the screen.
>
> Yes Direct Draw is one way. The other is that you can do the functionality
> of Direct Draw in you miniport driver if you wish. You can than add an
> Ioctl to you display driver that will then call the video miniport. Note
in
> the miniport you want to use VideoPortMapMemory(). This is map the
> FrameBuffer with page table entries that all processes can then access.
> This is equilivalent to using the Direct Draw features.
>
> Curious why do you need to know this?
>
> Sincerely;
> Michael Jones
>
> “Hermos” wrote in message news:xxxxx@ntdev…
> > Hi All,
> >
> > I am writing a mirror display driver using the DDK sample as base.
> >
> > I am transferring the drawing information to a user mode application.
> >
> > The drawing information contains information about the type of operation
> >
> > The change RECT and the actual video memory data.
> >
> >
> > It seems to me that the most efficient way to communicate the actual
video
> > memory data is to gain direct access to the video frame buffer(similar
to
> > the DirectX way).
> >
> > But I couldn’t find information on how to access the video frame buffer
> from
> > a
> > mirror device.
> >
> > Are you supposed to copy the data to your own frame buffer(seems like a
> > waste of
> > additional copy) or get direct access to the video frame buffer and map
it
> > to user mode address
> > space?
> >
> > I would appreciate any information on the subject.
> >
> > Thank you,
> >
> > Hermos
> >
> >
> >
> >
>
>
>
I would use the physical address of the real display adapter you are
mirroring. Map its frame buffer in your mirror driver miniport and then
pass that address to your application. Of course you will need to get the
real address of the frame buffer of the display address you are mirroring.
Get this by looking in device manager and seeing the resources it is using.
One of these memory regions will be its frame buffer.
Of course just use Direct X to do this.
I am only suggesting this method if the display adapter is real old and does
not have Direct X support of the most basic type. Use Direct X first.
Sincerely
Michael Jones
“Hermos” wrote in message news:xxxxx@ntdev…
> Hi All,
>
> I am writing a mirror display driver using the DDK sample as base.
>
> I am transferring the drawing information to a user mode application.
>
> The drawing information contains information about the type of operation
>
> The change RECT and the actual video memory data.
>
>
> It seems to me that the most efficient way to communicate the actual video
> memory data is to gain direct access to the video frame buffer(similar to
> the DirectX way).
>
> But I couldn’t find information on how to access the video frame buffer
from
> a
> mirror device.
>
> Are you supposed to copy the data to your own frame buffer(seems like a
> waste of
> additional copy) or get direct access to the video frame buffer and map it
> to user mode address
> space?
>
> I would appreciate any information on the subject.
>
> Thank you,
>
> Hermos
>
>
>
>
Hi Michael,
Thank you again but I need to do it programticaly,
how do I get the device information programticaly.
Hermos
“Michael Jones” wrote in message
news:xxxxx@ntdev…
> I would use the physical address of the real display adapter you are
> mirroring. Map its frame buffer in your mirror driver miniport and then
> pass that address to your application. Of course you will need to get
the
> real address of the frame buffer of the display address you are mirroring.
> Get this by looking in device manager and seeing the resources it is
using.
> One of these memory regions will be its frame buffer.
>
> Of course just use Direct X to do this.
>
> I am only suggesting this method if the display adapter is real old and
does
> not have Direct X support of the most basic type. Use Direct X first.
>
> Sincerely
> Michael Jones
>
>
> “Hermos” wrote in message news:xxxxx@ntdev…
> > Hi All,
> >
> > I am writing a mirror display driver using the DDK sample as base.
> >
> > I am transferring the drawing information to a user mode application.
> >
> > The drawing information contains information about the type of operation
> >
> > The change RECT and the actual video memory data.
> >
> >
> > It seems to me that the most efficient way to communicate the actual
video
> > memory data is to gain direct access to the video frame buffer(similar
to
> > the DirectX way).
> >
> > But I couldn’t find information on how to access the video frame buffer
> from
> > a
> > mirror device.
> >
> > Are you supposed to copy the data to your own frame buffer(seems like a
> > waste of
> > additional copy) or get direct access to the video frame buffer and map
it
> > to user mode address
> > space?
> >
> > I would appreciate any information on the subject.
> >
> > Thank you,
> >
> > Hermos
> >
> >
> >
> >
>
>
>
(1) I would use Direct Draw to get access to the frame buffer on you video
card.
(2) Looking at the registry I see the memory requirements for the video card
there:
HKEY_LOCAL_MACHINE\CurrentControlSet\Enum\PCI\ etc
you will see Control and then REG_RESOURCE_REQUIREMENTS. Now which memory
region is the frame buffer?
Sincerely
Michael Jones
“Hermos” wrote in message news:xxxxx@ntdev…
> Hi Michael,
>
> Thank you again but I need to do it programticaly,
> how do I get the device information programticaly.
>
> Hermos
>
> “Michael Jones” wrote in message
> news:xxxxx@ntdev…
> > I would use the physical address of the real display adapter you are
> > mirroring. Map its frame buffer in your mirror driver miniport and then
> > pass that address to your application. Of course you will need to get
> the
> > real address of the frame buffer of the display address you are
mirroring.
> > Get this by looking in device manager and seeing the resources it is
> using.
> > One of these memory regions will be its frame buffer.
> >
> > Of course just use Direct X to do this.
> >
> > I am only suggesting this method if the display adapter is real old and
> does
> > not have Direct X support of the most basic type. Use Direct X first.
> >
> > Sincerely
> > Michael Jones
> >
> >
> > “Hermos” wrote in message news:xxxxx@ntdev…
> > > Hi All,
> > >
> > > I am writing a mirror display driver using the DDK sample as base.
> > >
> > > I am transferring the drawing information to a user mode application.
> > >
> > > The drawing information contains information about the type of
operation
> > >
> > > The change RECT and the actual video memory data.
> > >
> > >
> > > It seems to me that the most efficient way to communicate the actual
> video
> > > memory data is to gain direct access to the video frame buffer(similar
> to
> > > the DirectX way).
> > >
> > > But I couldn’t find information on how to access the video frame
buffer
> > from
> > > a
> > > mirror device.
> > >
> > > Are you supposed to copy the data to your own frame buffer(seems like
a
> > > waste of
> > > additional copy) or get direct access to the video frame buffer and
map
> it
> > > to user mode address
> > > space?
> > >
> > > I would appreciate any information on the subject.
> > >
> > > Thank you,
> > >
> > > Hermos
> > >
> > >
> > >
> > >
> >
> >
> >
>
>
>
hi michael.
what is all this discussion about?
do u mean to tell me that u have a screen capture?
how accurate is it?
how efficient is it?
is it comparable to RDPDD or TS?
assaf
----- Original Message -----
From: “Michael Jones”
Newsgroups: ntdev
To: “Windows System Software Devs Interest List”
Sent: Friday, October 01, 2004 3:38 PM
Subject: Re:[ntdev] Display mirror driver and video memory
> (1) I would use Direct Draw to get access to the frame buffer on you
video
> card.
>
> (2) Looking at the registry I see the memory requirements for the video
card
> there:
> HKEY_LOCAL_MACHINE\CurrentControlSet\Enum\PCI\ etc
> you will see Control and then REG_RESOURCE_REQUIREMENTS. Now which memory
> region is the frame buffer?
>
> Sincerely
> Michael Jones
>
> “Hermos” wrote in message news:xxxxx@ntdev…
> > Hi Michael,
> >
> > Thank you again but I need to do it programticaly,
> > how do I get the device information programticaly.
> >
> > Hermos
> >
> > “Michael Jones” wrote in message
> > news:xxxxx@ntdev…
> > > I would use the physical address of the real display adapter you are
> > > mirroring. Map its frame buffer in your mirror driver miniport and
then
> > > pass that address to your application. Of course you will need to
get
> > the
> > > real address of the frame buffer of the display address you are
> mirroring.
> > > Get this by looking in device manager and seeing the resources it is
> > using.
> > > One of these memory regions will be its frame buffer.
> > >
> > > Of course just use Direct X to do this.
> > >
> > > I am only suggesting this method if the display adapter is real old
and
> > does
> > > not have Direct X support of the most basic type. Use Direct X first.
> > >
> > > Sincerely
> > > Michael Jones
> > >
> > >
> > > “Hermos” wrote in message
news:xxxxx@ntdev…
> > > > Hi All,
> > > >
> > > > I am writing a mirror display driver using the DDK sample as base.
> > > >
> > > > I am transferring the drawing information to a user mode
application.
> > > >
> > > > The drawing information contains information about the type of
> operation
> > > >
> > > > The change RECT and the actual video memory data.
> > > >
> > > >
> > > > It seems to me that the most efficient way to communicate the actual
> > video
> > > > memory data is to gain direct access to the video frame
buffer(similar
> > to
> > > > the DirectX way).
> > > >
> > > > But I couldn’t find information on how to access the video frame
> buffer
> > > from
> > > > a
> > > > mirror device.
> > > >
> > > > Are you supposed to copy the data to your own frame buffer(seems
like
> a
> > > > waste of
> > > > additional copy) or get direct access to the video frame buffer and
> map
> > it
> > > > to user mode address
> > > > space?
> > > >
> > > > I would appreciate any information on the subject.
> > > >
> > > > Thank you,
> > > >
> > > > Hermos
> > > >
> > > >
> > > >
> > > >
> > >
> > >
> > >
> >
> >
> >
>
>
>
> —
> Questions? First check the Kernel Driver FAQ at
http://www.osronline.com/article.cfm?id=256
>
> You are currently subscribed to ntdev as: xxxxx@hotmail.com
> To unsubscribe send a blank email to xxxxx@lists.osr.com
>
If you look at vnc which is open source project for screen capture you will
see the availability of a mirror driver to enhance the screen copying. I
developed a mirror that does this functionality. It was developed for a
“friend”. Since I developed I know how it works, right.
Other technologies are better in that send and receive the drawing command.
I did not do this.
I developed this in 6 weeks. I is pretty cool to the 2-d animations with
this tool. My friend was copying the whole screen, very bad performance,
etc. What I did was to give the application the rectangular regions on the
screen to copy - compress since the last time the application asked for the
regions. Hence alot less copying.
The source code is my “friends” but I can explain how it works.
If you wish more information on this email me in private as I need to know
why? etc.
So in short find VNC on the web and look at the mirror driver enhancment for
windows. I will tell you I will help anyone wishing to do an mirror driver
for VNC that includes the source code. I will tell them how do this but I
am not going to do it.
Sincerely
Michael Jones
“Hermos” wrote in message news:xxxxx@ntdev…
> Hi Michael,
>
> Thank you again but I need to do it programticaly,
> how do I get the device information programticaly.
>
> Hermos
>
> “Michael Jones” wrote in message
> news:xxxxx@ntdev…
> > I would use the physical address of the real display adapter you are
> > mirroring. Map its frame buffer in your mirror driver miniport and then
> > pass that address to your application. Of course you will need to get
> the
> > real address of the frame buffer of the display address you are
mirroring.
> > Get this by looking in device manager and seeing the resources it is
> using.
> > One of these memory regions will be its frame buffer.
> >
> > Of course just use Direct X to do this.
> >
> > I am only suggesting this method if the display adapter is real old and
> does
> > not have Direct X support of the most basic type. Use Direct X first.
> >
> > Sincerely
> > Michael Jones
> >
> >
> > “Hermos” wrote in message news:xxxxx@ntdev…
> > > Hi All,
> > >
> > > I am writing a mirror display driver using the DDK sample as base.
> > >
> > > I am transferring the drawing information to a user mode application.
> > >
> > > The drawing information contains information about the type of
operation
> > >
> > > The change RECT and the actual video memory data.
> > >
> > >
> > > It seems to me that the most efficient way to communicate the actual
> video
> > > memory data is to gain direct access to the video frame buffer(similar
> to
> > > the DirectX way).
> > >
> > > But I couldn’t find information on how to access the video frame
buffer
> > from
> > > a
> > > mirror device.
> > >
> > > Are you supposed to copy the data to your own frame buffer(seems like
a
> > > waste of
> > > additional copy) or get direct access to the video frame buffer and
map
> it
> > > to user mode address
> > > space?
> > >
> > > I would appreciate any information on the subject.
> > >
> > > Thank you,
> > >
> > > Hermos
> > >
> > >
> > >
> > >
> >
> >
> >
>
>
>