How does it Work

How does it Work?

The Mirror Video Driver is a driver that UltraVNC (for instance) can use to be quickly and efficiently notified with screen changes. Using it on an UltraVNC Server results in a excellent accuracy. The video driver also makes a direct link between the video driver frammebuffer memory and UltraVNC Server. Using the framebuffer directly eliminates the use of the CPU for intensive screen blitting, resulting in a big speed boost and very low CPU load.

Supported OS for mv2 mirror driver?

Microsoft Windows 2000
Microsoft Windows Server 2003
Microsoft Windows Server 2008
Microsoft Windows XP
Microsoft Windows Vista
Microsoft Windows 7

Installation

If you have a previous version installed, it is recommended to uninstall it first, by doing the following: setupdrv.exe uninstall
Installation is done by setupdrv.exe install
The program setupdrv.exe is located in the folder you've chosen during the driver installation.

Manual Uninstall

  1. net stop vnccom (stop communication manager service)
    Driver mv2 doesn't use the vnccom , only needed with the old drivers
  2. Under Windows XP: Control Panel ⇒ System ⇒ Hardware ⇒ Device Manager ⇒ Display Adapters ⇒ Uninstall mirror driver.
    Under Windows 2000: Windows 2000 does not allow video drivers to be removed while running.
    Trick: Remove vncdrv.sys (that is in system32/drivers), and reboot. You now can remove the driver the same way as with Windows XP, via the device manager.

Upgrading issue

For each version the vncdrv.sys and vnccom.sys are a pair. Vncdrv.sys is a kernel driver, so can only be unloaded on reboot. After upgrading the driver, vncdrv.sys is still the old version, but vnccom.sys is already the new one. Switching of vncdrv.sys is done on reboot. Don't use the driver before you reboot.

UltraVNC MD SDK

UltraVNC MD SDK

License for usage with UltraVNC

1. GRANT OF LICENSE:


UVNC bvba hereby grants UltraVNC Team -non-exclusive, royalty-free, worldwide, perpetual license to distribute, use the software product "Mirror Driver" in binary form for their remote controle software. UltraVNC Team hereby grants the end-user the right to use and distribute the software product "Mirror Driver" with "UltraVNC".



2. LIMITED WARRANTY


NO WARRANTY. To the maximum extent permitted by applicable law, We expressly disclaims any warranty for the SOFTWARE PRODUCT "Mirror Driver". The SOFTWARE PRODUCT "Mirror Driver" and any related documentation are provided "as is" without warranty of any kind, either express or implied, including, without limitation, the implied warranties of merchantability or fitness for a particular purpose. NO LIABILITY FOR CONSEQUENTIAL DAMAGES. To the maximum extent permitted by applicable law, in no event shall we be liable for any damages whatsoever (including, without limitation, damages for loss of business profit, business interruption, loss of business information, or any other pecuniary loss) arising out of the use of, or inability to use, this product.

Commercial license

Binary license
Price: 1000EU
UVNC bvba hereby grants You a nonexclusive, nontransferable, perpetual, worldwide license to distribute, use the software product "Mirror Driver" in binary form for your software.

Source code:
Price: 4500EU
UVNC bvba grants Licensee a nonexclusive, nontransferable, perpetual, worldwide rightto use the Source Code for the Mirror Driver. Licensee agrees and acknowledges that the Source Code is proprietary, valuable, and not generally known in the industry. Licensee agrees that it will maintain, through reasonable means, the confidentiality of the Source Code, and will not disseminate or allow unrestricted access. Licensee shall not distribute the Source Code to anyone other than employees and software developers of Licensee's organization or third party contractors working on behalf of Licensee’s organization with a need to know. Licensee may be held legally responsible for any infringement of intellectual property rights that is caused or encouraged by Licensee's failure to abide by this Agreement.

If you optain a source code license after buying a binary license, the source code license Price is 3500EU.

info: This email address is being protected from spambots. You need JavaScript enabled to view it.

Download

Download MD SDK

Supported OS

The Mirror Driver is supported on

Windows 2000
Windows 2003
Windows XP
Windows 2008
Windows Vista
Windows 7

Installation

Setupdrv.exe install
UNINSTALL
Setupdrv.exe uninstall
You can also use the control panal and add new hardware, select video and point to the .inf file. 

Files

Mv2.sys= miniport driver
Mv2.dll = display dll, the actual Mirror Driver stuff
Mv2.inf = installation file
Mv2.cat = catalog for signing driver

Samples

screenrecorder using bitblt
same screenrecorder with Mirror Driver
Get rectangle list of changed screen parts
The small samples help you to implement a Mirror Driver in your own application

VIDEODRIVER Class

 

VIDEODRIVER();
Initialize MD driver Class

Usage:
VIDEODRIVER *mydriver= new VIDEODRIVER;
Don’t forget to delete
delete mydriver; 

 void VIDEODRIVER_start(int x,int y,int w,int h,int depth);
Attach the Mirror Driver
position left top corner
x=left
y=top
w=screen width
h=screen height
depth= 8/16/32, special case 0=use current depth

Usage:

1) Mirror current desktop with same size and depth
HDC hDisplayDC = CreateDC("DISPLAY",NULL,NULL,NULL);
int cxWidth= GetDeviceCaps(hDisplayDC,HORZRES) ;
int cyHeight = GetDeviceCaps(hDisplayDC,VERTRES);
mydriver->VIDEODRIVER_start(0,0,cxWidth,cyHeight,0);

 

2) Mirror current desktop with same size and depth=32
HDC hDisplayDC = CreateDC("DISPLAY",NULL,NULL,NULL);
int cxWidth= GetDeviceCaps(hDisplayDC,HORZRES) ;
int cyHeight = GetDeviceCaps(hDisplayDC,VERTRES);
mydriver->VIDEODRIVER_start(0,0,cxWidth,cyHeight,32); 

WARNING

If you mirror a part of the desktop, moving a window
in your clipped region is not proper updated.
Sample:
mydriver->VIDEODRIVER_start(10,10,320,320,32);

void VIDEODRIVER_Stop();

Detach the Mirror Driver

Usage:
mydriver->VIDEODRIVER_Stop(); 

BOOL HardwareCursor();
Mirror Driver show cursor as blit
Usage:
mydriver->HardwareCursor();
see screentoavi_MD sample 

BOOL NoHardwareCursor();
Mirror Driver eliminate cursor as part of the blits
Usage:
mydriver->NoHardwareCursor();

 char *myframebuffer;
This is a memory buffer that contain your screen in the format you specified
32 RGBARGBARGBARGBA
Instead of using bitblit you can now use memcpy to get access to the screen data.
Usage:
see screentoavi_MD sample

PCHANGES_BUF mypchangebuf;
This is a ringbuffer that contain the changed parts.
format:

typedef struct _CHANGES_RECORD
{
ULONG type;  //screen_to_screen, blit, newcache,oldcache
RECT rect;
POINT point;
}CHANGES_RECORD;

typedef CHANGES_RECORD *PCHANGES_RECORD;

typedef struct _CHANGES_BUF
{
ULONG counter;
CHANGES_RECORD pointrect[MAXCHANGES_BUF];
}CHANGES_BUF;
typedef CHANGES_BUF *PCHANGES_BUF;

The driver record the rect changes, the application need to remember the old position
to extract the needed updates
Usage:
See changed_screen_parts sample