Comments (8)
hi WenTao,
At this moment, I don't have enough information on what's wrong with the 2nd plug-in.
If you can turn on debugging message, I can probably help.
To turn on debugging message, follow this MSDN
- create a registry key:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Debug Print Filter - Under this key, create a value "DEFAULT" , and set it to 0xffffffff
- reboot your system.
- install the checked version of the driver. You need to compile vmon_func.sys .
- Use dbgview.exe to catch debug message. https://docs.microsoft.com/en-us/sysinternals/downloads/debugview
from virtual-display.
Hi Jia Bang,
Thank you very much for your reply and guidance, according your method of printing the kernel log, the operation is plug in -> plug out -> plug in, thank you.
the log is as follows:
00000051 11.55894566 LJB_VMON_EvtDeviceFileCreate: entered 00000052 11.55916119 LJB_VMON_EvtDeviceD0Entry - coming from WdfPowerDeviceD3 00000053 11.55916882 LJB_VMON_EvtIoDeviceControlIoControlCode (0x220000) 00000054 11.55931282 LJB_VMON_EvtDeviceFileCreate: entered 00000055 11.55932140 LJB_VMON_InternalDeviceIoControl: IoctlCode(0x220003), OutputBufferLength(40), InputBufferLength(40) 00000056 11.55932522 LJB_VMON_InternalDeviceIoControl: complete IoctlCode(0x220003) with ntStatus(0x0), BytesReturned(40) 00000057 11.55938244 LJB_VMON_EvtDeviceFileCreate: entered 00000058 11.55939198 LJB_VMON_InternalDeviceIoControl: IoctlCode(0x220003), OutputBufferLength(40), InputBufferLength(40) 00000059 11.55939484 ?LJB_VMON_InternalDeviceIoControl: InterfaceReferenceCount(2) too large! 00000060 11.55939770 LJB_VMON_InternalDeviceIoControl: complete IoctlCode(0x220003) with ntStatus(0xc0000001), BytesReturned(0) 00000061 11.55940247 LJB_VMON_EvtFileClose: entered 00000062 11.72660732 LJB_VMON_GenericIoctl: primary_surface(FFFFFA800FF3C0D0) created, Width(2048)/Height(1152)/Size(0x900000) 00000063 11.74632549 LJB_VMON_GenericIoctl: LCI_PROXYKMD_NOTIFY_PRIMARY_SURFACE_UPDATE, FrameId(1), hLatestPrimarySurface(0xFFFFFA800C482570) 00000064 12.16284466 LJB_VMON_GenericIoctl: primary_surface(FFFFFA800FF3C0D0) destroyed 00000065 12.24620628 LJB_VMON_GenericIoctl: primary_surface(FFFFFA800FF936E0) created, Width(2048)/Height(1152)/Size(0x900000) 00000066 12.26152897 LJB_VMON_GenericIoctl: LCI_PROXYKMD_NOTIFY_PRIMARY_SURFACE_UPDATE, FrameId(2), hLatestPrimarySurface(0xFFFFFA8010C12850) 00000067 12.26699924 LJB_VMON_GenericIoctl: primary_surface(FFFFFA800C070450) created, Width(2048)/Height(1152)/Size(0x900000) 00000068 12.31254864 LJB_VMON_GenericIoctl: primary_surface(FFFFFA800C070450) destroyed 00000069 12.33511257 LJB_VMON_GenericIoctl: primary_surface(FFFFFA801089AD30) created, Width(2048)/Height(1152)/Size(0x900000) 00000070 12.35717297 LJB_VMON_GenericIoctl: LCI_PROXYKMD_NOTIFY_PRIMARY_SURFACE_UPDATE, FrameId(3), hLatestPrimarySurface(0xFFFFFA8010C12850) 00000071 12.41717052 LJB_VMON_GenericIoctl: LCI_PROXYKMD_NOTIFY_PRIMARY_SURFACE_UPDATE, FrameId(4), hLatestPrimarySurface(0xFFFFFA80113041F0) 00000072 12.46340561 LJB_VMON_GenericIoctl: LCI_PROXYKMD_NOTIFY_PRIMARY_SURFACE_UPDATE, FrameId(5), hLatestPrimarySurface(0xFFFFFA8010C12850) 00000073 12.55936623 LJB_VMON_GenericIoctl: LCI_PROXYKMD_NOTIFY_PRIMARY_SURFACE_UPDATE, FrameId(6), hLatestPrimarySurface(0xFFFFFA80113041F0) 00000074 12.59285259 LJB_VMON_GenericIoctl: LCI_PROXYKMD_NOTIFY_PRIMARY_SURFACE_UPDATE, FrameId(7), hLatestPrimarySurface(0xFFFFFA8010C12850) 00000075 12.60936260 LJB_VMON_GenericIoctl: LCI_PROXYKMD_NOTIFY_PRIMARY_SURFACE_UPDATE, FrameId(8), hLatestPrimarySurface(0xFFFFFA80113041F0) 00000076 12.62151718 LJB_VMON_GenericIoctl: LCI_PROXYKMD_NOTIFY_PRIMARY_SURFACE_UPDATE, FrameId(9), hLatestPrimarySurface(0xFFFFFA8010C12850) 00000077 12.63848209 LJB_VMON_GenericIoctl: LCI_PROXYKMD_NOTIFY_PRIMARY_SURFACE_UPDATE, FrameId(10), hLatestPrimarySurface(0xFFFFFA80113041F0) 00000078 12.65571117 LJB_VMON_GenericIoctl: LCI_PROXYKMD_NOTIFY_PRIMARY_SURFACE_UPDATE, FrameId(11), hLatestPrimarySurface(0xFFFFFA8010C12850) 00000079 12.86054516 EXWORKER: worker exit with system affinity set, worker routine FFFFF800051D01B0, parameter FFFFFA801049C1D0, item FFFFFA801049C1D0 00000080 12.96369362 LJB_VMON_GenericIoctl: LCI_PROXYKMD_NOTIFY_PRIMARY_SURFACE_UPDATE, FrameId(12), hLatestPrimarySurface(0xFFFFFA80113041F0) 00000081 12.99929810 LJB_VMON_GenericIoctl: LCI_PROXYKMD_NOTIFY_PRIMARY_SURFACE_UPDATE, FrameId(13), hLatestPrimarySurface(0xFFFFFA8010C12850) 00000082 14.12581348 [1512] Enter case SERVICE_CONTROL_INTERROGATE: 00000083 14.12624359 [1512] ReportSvcStatus start - dwCurrentState = 4 00000084 14.12625408 [1512] In case SERVICE_RUNNING 00000085 14.12627697 [1512] Enter Function StartCustomThread()! 00000086 14.12629032 [1512] Enter condition pSvc->hWorkEvent != NULL! 00000087 14.12630272 [1512] ReportSvcStatus dwCurrentState = 4 00000088 15.51563168 LJB_VMON_EvtFileClose: entered 00000101 15.86039639 EXWORKER: worker exit with system affinity set, worker routine FFFFF800051D01B0, parameter FFFFFA800C44DC20, item FFFFFA800C44DC20 00000089 15.64179802 [1512] Enter case SERVICE_CONTROL_INTERROGATE: 00000090 15.64181232 [1512] ReportSvcStatus start - dwCurrentState = 4 00000091 15.64182281 [1512] In case SERVICE_RUNNING 00000092 15.64183426 [1512] Enter Function StartCustomThread()! 00000093 15.64184475 [1512] Enter condition pSvc->hWorkEvent != NULL! 00000094 15.64185715 [1512] ReportSvcStatus dwCurrentState = 4 00000095 15.66247082 [1512] Enter case SERVICE_CONTROL_INTERROGATE: 00000096 15.66248608 [1512] ReportSvcStatus start - dwCurrentState = 4 00000097 15.66249752 [1512] In case SERVICE_RUNNING 00000098 15.66250801 [1512] Enter Function StartCustomThread()! 00000099 15.66251945 [1512] Enter condition pSvc->hWorkEvent != NULL! 00000100 15.66252995 [1512] ReportSvcStatus dwCurrentState = 4 00000102 19.35282898 [1512] Enter case SERVICE_CONTROL_INTERROGATE: 00000103 19.35284424 [1512] ReportSvcStatus start - dwCurrentState = 4 00000104 19.35285950 [1512] In case SERVICE_RUNNING 00000105 19.35287285 [1512] Enter Function StartCustomThread()! 00000106 19.35288429 [1512] Enter condition pSvc->hWorkEvent != NULL! 00000107 19.35289574 [1512] ReportSvcStatus dwCurrentState = 4 00000108 19.68737221 [22608] SCEN_SETFOCUS 00000109 19.68741798 [22608] SystemUpdate 00000110 20.85613441 [1512] Enter case SERVICE_CONTROL_INTERROGATE: 00000111 20.85619736 [1512] ReportSvcStatus start - dwCurrentState = 4 00000112 20.85624123 [1512] In case SERVICE_RUNNING 00000113 20.85628510 [1512] Enter Function StartCustomThread()! 00000114 20.85632706 [1512] Enter condition pSvc->hWorkEvent != NULL! 00000115 20.85634995 [1512] ReportSvcStatus dwCurrentState = 4 00000116 20.85732269 [1512] Enter case SERVICE_CONTROL_INTERROGATE: 00000117 20.85734558 [1512] ReportSvcStatus start - dwCurrentState = 4 00000118 20.85736847 [1512] In case SERVICE_RUNNING 00000119 20.85738945 [1512] Enter Function StartCustomThread()! 00000120 20.85741043 [1512] Enter condition pSvc->hWorkEvent != NULL! 00000121 20.85743141 [1512] ReportSvcStatus dwCurrentState = 4 00000122 24.45891762 [1512] Enter case SERVICE_CONTROL_INTERROGATE: 00000123 24.45894051 [1512] ReportSvcStatus start - dwCurrentState = 4 00000124 24.45898056 [1512] In case SERVICE_RUNNING 00000125 24.45899582 [1512] Enter Function StartCustomThread()! 00000126 24.45901108 [1512] Enter condition pSvc->hWorkEvent != NULL! 00000127 24.45902824 [1512] ReportSvcStatus dwCurrentState = 4 00000128 26.05118942 [1512] Enter case SERVICE_CONTROL_INTERROGATE: 00000129 26.05129814 [1512] ReportSvcStatus start - dwCurrentState = 4 00000130 26.05131912 [1512] In case SERVICE_RUNNING 00000131 26.05133057 [1512] Enter Function StartCustomThread()! 00000132 26.05134583 [1512] Enter condition pSvc->hWorkEvent != NULL! 00000133 26.05135727 [1512] ReportSvcStatus dwCurrentState = 4 00000134 26.05854034 [1512] Enter case SERVICE_CONTROL_INTERROGATE: 00000135 26.05855560 [1512] ReportSvcStatus start - dwCurrentState = 4 00000136 26.05857086 [1512] In case SERVICE_RUNNING 00000137 26.05858612 [1512] Enter Function StartCustomThread()! 00000138 26.05859756 [1512] Enter condition pSvc->hWorkEvent != NULL! 00000139 26.05861282 [1512] ReportSvcStatus dwCurrentState = 4 00000140 29.61993980 [1512] Enter case SERVICE_CONTROL_INTERROGATE: 00000141 29.61996841 [1512] ReportSvcStatus start - dwCurrentState = 4 00000142 29.61998940 [1512] In case SERVICE_RUNNING 00000143 29.62001228 [1512] Enter Function StartCustomThread()! 00000144 29.62003326 [1512] Enter condition pSvc->hWorkEvent != NULL! 00000145 29.62005615 [1512] ReportSvcStatus dwCurrentState = 4 00000146 31.21545410 [1512] Enter case SERVICE_CONTROL_INTERROGATE: 00000147 31.21546364 [1512] ReportSvcStatus start - dwCurrentState = 4 00000148 31.21547318 [1512] In case SERVICE_RUNNING 00000149 31.21548080 [1512] Enter Function StartCustomThread()! 00000150 31.21549034 [1512] Enter condition pSvc->hWorkEvent != NULL! 00000151 31.21549988 [1512] ReportSvcStatus dwCurrentState = 4 00000152 31.22554016 [1512] Enter case SERVICE_CONTROL_INTERROGATE: 00000153 31.22554779 [1512] ReportSvcStatus start - dwCurrentState = 4 00000154 31.22556114 [1512] In case SERVICE_RUNNING 00000155 31.22556686 [1512] Enter Function StartCustomThread()! 00000156 31.22557640 [1512] Enter condition pSvc->hWorkEvent != NULL! 00000157 31.22558403 [1512] ReportSvcStatus dwCurrentState = 4 00000158 34.75617599 [1512] Enter case SERVICE_CONTROL_INTERROGATE: 00000159 34.75626755 [1512] ReportSvcStatus start - dwCurrentState = 4 00000160 34.75629425 [1512] In case SERVICE_RUNNING 00000161 34.75632095 [1512] Enter Function StartCustomThread()! 00000162 34.75641251 [1512] Enter condition pSvc->hWorkEvent != NULL! 00000163 34.75643921 [1512] ReportSvcStatus dwCurrentState = 4 00000164 35.25025558 LJB_VMON_EvtDeviceFileCreate: entered 00000165 35.25032043 LJB_VMON_EvtIoDeviceControlIoControlCode (0x220004) 00000166 35.25053787 LJB_VMON_EvtFileClose: entered 00000167 35.25057220 LJB_VMON_EvtFileClose: entered 00000168 36.36595154 [1512] Enter case SERVICE_CONTROL_INTERROGATE: 00000169 36.36758423 [1512] ReportSvcStatus start - dwCurrentState = 4 00000170 36.36772919 [1512] In case SERVICE_RUNNING 00000171 36.36784744 [1512] Enter Function StartCustomThread()! 00000172 36.36849976 [1512] Enter condition pSvc->hWorkEvent != NULL! 00000173 36.37014389 [1512] ReportSvcStatus dwCurrentState = 4 00000174 36.38380814 [1512] Enter case SERVICE_CONTROL_INTERROGATE: 00000175 36.38592529 [1512] ReportSvcStatus start - dwCurrentState = 4 00000176 36.38725662 [1512] In case SERVICE_RUNNING 00000177 36.38903427 [1512] Enter Function StartCustomThread()! 00000178 36.39101028 [1512] Enter condition pSvc->hWorkEvent != NULL! 00000179 36.39205933 [1512] ReportSvcStatus dwCurrentState = 4 00000180 36.85960770 EXWORKER: worker exit with system affinity set, worker routine FFFFF800051D01B0, parameter FFFFFA800FA212B0, item FFFFFA800FA212B0 00000181 39.29164124 [22608] SCEN_SETFOCUS 00000182 39.29166031 [22608] SystemUpdate 00000183 39.86333847 EXWORKER: worker exit with system affinity set, worker routine FFFFF800051D01B0, parameter FFFFFA800816C2B0, item FFFFFA800816C2B0 00000184 39.87492752 [1512] Enter case SERVICE_CONTROL_INTERROGATE: 00000185 39.87493515 [1512] ReportSvcStatus start - dwCurrentState = 4 00000186 39.87494659 [1512] In case SERVICE_RUNNING 00000187 39.87495804 [1512] Enter Function StartCustomThread()! 00000188 39.87496185 [1512] Enter condition pSvc->hWorkEvent != NULL! 00000189 39.87497711 [1512] ReportSvcStatus dwCurrentState = 4 00000190 41.56643677 [1512] Enter case SERVICE_CONTROL_INTERROGATE: 00000191 41.56646729 [1512] ReportSvcStatus start - dwCurrentState = 4 00000192 41.56648254 [1512] In case SERVICE_RUNNING 00000193 41.56649780 [1512] Enter Function StartCustomThread()! 00000194 41.56651306 [1512] Enter condition pSvc->hWorkEvent != NULL! 00000195 41.56652451 [1512] ReportSvcStatus dwCurrentState = 4 00000196 41.60194778 [1512] Enter case SERVICE_CONTROL_INTERROGATE: 00000197 41.60195923 [1512] ReportSvcStatus start - dwCurrentState = 4 00000198 41.60196686 [1512] In case SERVICE_RUNNING 00000199 41.60197449 [1512] Enter Function StartCustomThread()! 00000200 41.60198593 [1512] Enter condition pSvc->hWorkEvent != NULL! 00000201 41.60198975 [1512] ReportSvcStatus dwCurrentState = 4 00000202 44.98268127 [1512] Enter case SERVICE_CONTROL_INTERROGATE: 00000203 44.98270416 [1512] ReportSvcStatus start - dwCurrentState = 4 00000204 44.98272324 [1512] In case SERVICE_RUNNING 00000205 44.98274231 [1512] Enter Function StartCustomThread()! 00000206 44.98278427 [1512] Enter condition pSvc->hWorkEvent != NULL! 00000207 44.98280334 [1512] ReportSvcStatus dwCurrentState = 4 00000208 46.79691315 [1512] Enter case SERVICE_CONTROL_INTERROGATE: 00000209 46.79695892 [1512] ReportSvcStatus start - dwCurrentState = 4 00000210 46.79699707 [1512] In case SERVICE_RUNNING 00000211 46.79703140 [1512] Enter Function StartCustomThread()! 00000212 46.79706192 [1512] Enter condition pSvc->hWorkEvent != NULL! 00000213 46.79709625 [1512] ReportSvcStatus dwCurrentState = 4 00000214 46.80628967 [1512] Enter case SERVICE_CONTROL_INTERROGATE: 00000215 46.80630112 [1512] ReportSvcStatus start - dwCurrentState = 4 00000216 46.80632401 [1512] In case SERVICE_RUNNING 00000217 46.80633545 [1512] Enter Function StartCustomThread()! 00000218 46.80634308 [1512] Enter condition pSvc->hWorkEvent != NULL! 00000219 46.80638885 [1512] ReportSvcStatus dwCurrentState = 4 00000220 50.11050415 [1512] Enter case SERVICE_CONTROL_INTERROGATE: 00000221 50.11055374 [1512] ReportSvcStatus start - dwCurrentState = 4 00000222 50.11057281 [1512] In case SERVICE_RUNNING 00000223 50.11059189 [1512] Enter Function StartCustomThread()! 00000224 50.11060715 [1512] Enter condition pSvc->hWorkEvent != NULL! 00000225 50.11062622 [1512] ReportSvcStatus dwCurrentState = 4 00000226 51.54987717 LJB_VMON_EvtDeviceFileCreate: entered 00000227 51.54999924 LJB_VMON_EvtIoDeviceControlIoControlCode (0x220000) 00000228 51.55017853 LJB_VMON_EvtDeviceFileCreate: entered 00000229 51.55019379 LJB_VMON_InternalDeviceIoControl: IoctlCode(0x220003), OutputBufferLength(40), InputBufferLength(40) 00000230 51.55019379 ?LJB_VMON_InternalDeviceIoControl: InterfaceReferenceCount(2) too large! 00000231 51.55019760 LJB_VMON_InternalDeviceIoControl: complete IoctlCode(0x220003) with ntStatus(0xc0000001), BytesReturned(0) 00000232 51.55019760 LJB_VMON_EvtFileClose: entered 00000233 51.55030060 LJB_VMON_EvtDeviceFileCreate: entered 00000234 51.55031204 LJB_VMON_InternalDeviceIoControl: IoctlCode(0x220003), OutputBufferLength(40), InputBufferLength(40) 00000235 51.55031967 ?LJB_VMON_InternalDeviceIoControl: InterfaceReferenceCount(2) too large! 00000236 51.55031967 LJB_VMON_InternalDeviceIoControl: complete IoctlCode(0x220003) with ntStatus(0xc0000001), BytesReturned(0) 00000237 51.55032349 LJB_VMON_EvtFileClose: entered 00000238 51.94128036 [1512] Enter case SERVICE_CONTROL_INTERROGATE: 00000239 51.94131851 [1512] ReportSvcStatus start - dwCurrentState = 4 00000240 51.94133759 [1512] In case SERVICE_RUNNING
from virtual-display.
Hi WenTao,
The debug message looks garbled up. Would you do me a favor, capture the debug message again, and save the log to a file. Also, do NOT enable user mode message. Unselect "Capture->Capture Win32" & "Caputue->Capture Global Win32".
Paste the log file so that I can see what's going on.
from virtual-display.
Hi Jia Bang,
Thank you for you reply and help, I reprinted the following log, it seem to fail to receive the notification where from LCI Proxy Driver when i 2nd plug in the virtual monitor, thank you.
dbgview.log
from virtual-display.
Hi WenTao,
Let me know if this patch works. If so, I will update the repository.
ljb_vmon_internal_ioctl.zip
from virtual-display.
Hi JiaBang,
Thank you very much ,with your help, the problem has finally been solved,this patch works fine via additional a little fix that replacing InterlockedIncrement with InterlockedDecrement. Now,on this basis of this vmon_funtion driver demo you supported, I plan to plug more than one virtual monitor into system for implementing support for multiple virtual monitor, Could you give me some suggestions? How to Modify it?thank you.
from virtual-display.
oops, my typo. Thanks for correcting this.
For multiple monitor support, you can do this:
-
Create a "virtua monitor bus enumerator" driver. For each monitor, you enumerate 1 "vmon_function" driver instance. This is to mimic how a USB display driver is implemented where a USB device represent a virtual monitor.
-
LCI also ships driver that support multiple monitor without relying on "vmon_func.sys". There is a user mode API (not exported in this version of lci_proxywddm.sys on this Git project) you can use.
The goal of this project is NOT to support multiple monitors. If you need commercial support, I would suggest you to contact ChunYi ([email protected] ).
If you do not intend to use this driver for commercial purpose, probably writing a bus enumerator(approach #1) would fit your need.
from virtual-display.
Hi JiaBang,
Thanks for your help these days.
from virtual-display.
Related Issues (8)
- vmon.exe was not display the content of the virtual monitor HOT 1
- Driver certification issues HOT 1
- >60hz refresh rate support via Extended EDID not working HOT 6
- Is the driver suitable for use under win8 and win10 systems? HOT 3
- Can this project support win10? HOT 2
- precompiled vmon driver install not correctly in Windows7_x64. HOT 1
- Windows on ARM, Support? HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from virtual-display.