Git Product home page Git Product logo

Comments (8)

LinJiabang avatar LinJiabang commented on May 28, 2024

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

https://docs.microsoft.com/en-us/windows-hardware/drivers/devtest/reading-and-filtering-debugging-messages

  1. create a registry key:
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Debug Print Filter
  2. Under this key, create a value "DEFAULT" , and set it to 0xffffffff
  3. reboot your system.
  4. install the checked version of the driver. You need to compile vmon_func.sys .
  5. Use dbgview.exe to catch debug message. https://docs.microsoft.com/en-us/sysinternals/downloads/debugview

from virtual-display.

wentao786 avatar wentao786 commented on May 28, 2024

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.

LinJiabang avatar LinJiabang commented on May 28, 2024

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.

wentao786 avatar wentao786 commented on May 28, 2024

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.

LinJiabang avatar LinJiabang commented on May 28, 2024

Hi WenTao,
Let me know if this patch works. If so, I will update the repository.
ljb_vmon_internal_ioctl.zip

from virtual-display.

wentao786 avatar wentao786 commented on May 28, 2024

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.

LinJiabang avatar LinJiabang commented on May 28, 2024

oops, my typo. Thanks for correcting this.
For multiple monitor support, you can do this:

  1. 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.

  2. 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.

wentao786 avatar wentao786 commented on May 28, 2024

Hi JiaBang,
Thanks for your help these days.

from virtual-display.

Related Issues (8)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.