I am currently developing an additional (second) display driver based on the IDD Indirect Display Driver and it is working mostly on Windows 10 22H2 x64.
However, when I tried the same driver on Windows 11 24H2, the driver kills and reloads every 3 to 5 seconds. I know that with the user mode driver, if the system determines that this is a hang-up, it will reboot, but apparently the timing of the kill and reload is too fast.
Then I found a registry setting under HKLMSystemCurrentControlSet called TerminateIndirectOnStall=0. After applying this setting, the above driver kills and reloads disappeared.
So my question is, how does IddCx (I think) determine the stall status?
I tried to measure the interval between IddCxSwapChainReleaseAndAcquireBuffer() and IddCxSwapChainFinishedProcessingFrame() and it was always less than 30 ms. The documentation says 10 seconds is the threshold.
Please find the Web page titled " Debugging indirect display drivers" in Microsoft Document WebSite.
Sorry for the delay in getting back. I managed to obtain the IddCx.pdb and did some research on this.
I found that this situation (with my site and driver combination) only occurs the first time the display driver is installed.
Setting the “TerminateIndirectOnStall=0” registry
Install the display driver by plug in device
Remove “TerminateIndirectOnStall” from the registry.
Then the display driver works very well on this Windows 11. This means that the limitation exists even when the driver is installed for the first time.
Also, the Windows system log entries were still there (in reverse order actual time) :
"Device xxxxxx Device (location ) is offline due to a crash in the user mode driver. Five more attempts will be made to restart the device. Contact the device manufacturer for more information on this issue.”
"Device xxxxxx Device (location ) is offline due to a user mode driver crash. Four more attempts will be made to restart the device. Contact the device manufacturer for more information on this issue.”
"Device xxxxxx Device (location ) is offline due to a user mode driver crash. Three more attempts will be made to restart the device. Contact the device manufacturer for more information on this issue.”
"Device xxxxxx Device (location ) is offline due to a user mode driver crash. Two more attempts will be made to restart the device. Contact the device manufacturer for more information on this issue.”
"Device xxxxxx Device (location ) is offline due to a user mode driver crash. One more reboot of the device will be attempted. Contact the device manufacturer for more information on this issue.”
"Device xxxxxx Device (location ) is offline due to a user mode device crash. The maximum number of reboots has been reached and no further attempts will be made to reboot this device. Disconnecting and reconnecting the device or disabling and re-enabling the device in Device Manager will clear this limitation and the device will be accessible again. Contact the device manufacturer for more information on this issue.”
note: the original messages were in Japanese so these are the translated messages.
This is a common action/limitation for WDF-based drivers. But the interval time of each message is 1-2 seconds, not 10 seconds, so I am not sure if this is really related to the watchdog timeout of the IddCx component.
So my question at this point is : Is it possible to implement something that would eliminate the delay in first time driver loading the UMDF driver for the first time? May be other driver installed at the same time?
Or is there some message (that I am missing) that the user mode driver should respond to?