linjiabang / virtual-display Goto Github PK
View Code? Open in Web Editor NEWUSB/Ethernet Display driver sample for Windows
License: GNU General Public License v2.0
USB/Ethernet Display driver sample for Windows
License: GNU General Public License v2.0
Hey there, great project, it's the only one of its kind that works for me, I tried the indirect display driver from the Microsoft employee and it crashed my system.
I did have to mod your build batch file a bit to get it to compile on my machine, but it fails at the certification step so I can't actually install a custom-built vmon driver, only your precompiled version. The vmon.exe file I built works fine with your precompiled vmon driver though.
Your batch file has a hard coded Digisign .cer filename, so I tried to get my own but I can't figure out why it's not working. There are a lot of parameters and cert types.
Can you tell me, do you have to use a paid certificate authority? I'm OK with the user having to click "trust this driver" but right now, I can't get signtool to actually do its job.
I'm also confused about the differences between the various certificate authorities and which exact one is needed for this type of driver signing. Can you elaborate a bit on how you created your .cer file so that I can get this up and running with my own?
Thanks!
hi,Lin
i was follow your step4 ,installed everthing succeced,also i saw the "fresco logic proxy display adapter"
and the "ljb virtual monitor" under the "system devices" node which is in the device manager view.
and then i started vmon.exe ,nothing happened,even if i selected the "plugin" "open"menu.
am i miss some sets to let the vmon.exe display the content of the virtual monitor.
thanks very mush!
Hi, is this driver suitable for use under win8 and win10 systems? What is the maximum resolution of the virtual display?
Good project, thank you very much.
But I had a problem when I install vmon driver, I got error code 39,
follow is cmd output.
Thank you.
E:\virtual-display>E:\virtual-display\tools\devcon\x64\devcon.exe install E:\virtual-display\tools\precomplied\vmon\vmon
_func.inf root\ljb_vmon
Device node created. Install is complete when drivers are installed...
Updating drivers for root\ljb_vmon from E:\virtual-display\tools\precomplied\vmon\vmon_func.inf.
Drivers installed successfully.
E:\virtual-display>E:\virtual-display\tools\devcon\x64\devcon.exe status root\ljb_vmon
ROOT\SYSTEM\0002
Name: LJB Virtual Monitor
The device has the following problem: 39
1 matching device(s) found.
E:\virtual-display>pause
Press any key to continue . . .
Hi there, sorry to bug you again, I'm having a hard time trying to understand why adding a 120hz mode (say, at 1080p) doesn't work.
I can never see that as an option in display settings for the virtual desktop screen after I recompile the vmon driver and run it. I've managed to add different resolutions, like 1440p or 2160p (UHD), using SetDetailTimingDesc but I can't for the life of me figure out how to get anything but 60hz working.
I removed the hardcoded 60hz line computing the max pixel clock:
UINT CONST PixelClock = (Width + HBlank) * (Height + VBlank) * RefreshRate;
I also tried manually using the EDID bytes (basic and extended) for my Acer G-sync monitor as a template, to add 120hz and 144hz modes, exporting from CRU to replace the default Samsung monitor you used.
I also tried adding >60hz using the standard timings, by following the code comments to set the bits to 60 since the extended EDID refresh rate is supposed to be 0 (base = 60hz) + offset value (default 0) = final refresh.
Please, let me know if you have any insights! I'm starting to think that maybe the lci proxy driver is the thing that's refusing anything other than 60hz.
By a little modifying the demo of vmon.exe, I can implement plug in/out of virtual monitor(plug in -> plug out), but my problem is that I can't plug in again after plug out of virtual monitor(plug in -> plug out -> can not plug in), unless the vmon_funtion driver is re-disabled and enabled, how can I solve this problem?
The code is as follows ๏ผ
**vmon.exe**
if (dev_ctx->pDeviceInfo->plug_state == IOCTL_LJB_VMON_UNPLUG_MONITOR)
{
DeviceIoControl(
dev_ctx->hDevice,
IOCTL_LJB_VMON_UNPLUG_MONITOR,
NULL,
0,
NULL,
0,
&bytes_returned,
NULL
);
}
else
{
io_ret = DeviceIoControl(
dev_ctx->hDevice,
//IOCTL_LJB_VMON_PLUGIN_MONITOR,
IOCTL_LJB_VMON_PLUGIN_MONITOR,
MyEDID,
sizeof(MyEDID),
NULL,
0,
&bytes_returned,
NULL
);
if (!io_ret)
{
DBG_PRINT((__FUNCTION__": IOCTL_LJB_VMON_PLUGIN_MONITOR failed\n"));
return;
}
}
**vmon_fuction.sys:**
case IOCTL_LJB_VMON_PLUGIN_MONITOR:
if (input_buffer_length < 128)
{
LJB_VMON_Printf(dev_ctx, DBGLVL_ERROR,
(__FUNCTION__
": input_buffer_length(%u) too small?\n",
input_buffer_length
));
ntStatus = STATUS_BUFFER_TOO_SMALL;
break;
}
ntStatus = WdfRequestRetrieveInputBuffer(
Request,
128,
&edid_block,
NULL);
if (!NT_SUCCESS(ntStatus))
{
LJB_VMON_Printf(dev_ctx, DBGLVL_ERROR,
(__FUNCTION__
": output_buffer_length(%u) too small?\n",
output_buffer_length
));
break;
}
RtlCopyMemory(dev_ctx->EdidBlock, edid_block, 128);
IoSetDeviceInterfaceState(
&dev_ctx->lci_interface_path,
TRUE);
ntStatus = STATUS_SUCCESS;
break;
case IOCTL_LJB_VMON_UNPLUG_MONITOR:
RtlZeroMemory(dev_ctx->EdidBlock, 128);
IoSetDeviceInterfaceState(
&dev_ctx->lci_interface_path,
FALSE);
ntStatus = STATUS_SUCCESS;
break;
If not , Can you release a version, win10 compile does not pass, thanks
Please let us know when can we have an ARM64 driver for Windows on ARM. We can help you test we have Windows on Rasberry Pi setup. Please pursue it we at Windows on Rasberry Pi community will be glad to extend support in testing your drivers and tools for ARM64.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.