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