我需要一些指导,以解决我在使用某些 USB 设备时遇到的低级问题。
背景:我有一个.NET Windows Service
,扫描connected USB devices via WMI queries
+阅读低电平 USB 数据使用external C code
。
虽然这种情况很少发生,但 USB 设备(键盘、鼠标或智能卡读卡器)偶尔会停止工作。查看 Windows 的Device Manager
,设备显示为带有感叹号的黄色三角形。查看 的Event Viewer
,Microsoft-Windows-Kernel PnP
我看到以下错误(对于老鼠, 在这种情况下)
XML 视图:
- <Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
- <System>
<Provider Name="Microsoft-Windows-Kernel-PnP" Guid="{9c205a39-1250-487d-abd7-e831c6290539}" />
<EventID>411</EventID>
<Version>0</Version>
<Level>2</Level>
<Task>0</Task>
<Opcode>0</Opcode>
<Keywords>0x4000000000000000</Keywords>
<TimeCreated SystemTime="2022-12-22T08:15:21.1540378Z" />
<EventRecordID>300</EventRecordID>
<Correlation />
<Execution ProcessID="4" ThreadID="3780" />
<Channel>Microsoft-Windows-Kernel-PnP/Configuration</Channel>
<Computer>MyComputerName</Computer>
<Security UserID="S-1-5-18" />
</System>
- <EventData>
<Data Name="DeviceInstanceId">USB\VID_03F0&PID_094A\6&1ab5e341&0&2</Data>
<Data Name="DriverName">input.inf</Data>
<Data Name="ClassGuid">{745a17a0-74d3-11d0-b6fe-00a0c90f57da}</Data>
<Data Name="ServiceName">HidUsb</Data>
<Data Name="LowerFilters" />
<Data Name="UpperFilters" />
<Data Name="Problem">0x26</Data>
<Data Name="Status">0xc000038e</Data>
</EventData>
</Event>
下一步该怎么办?
没有明确迹象表明该错误是由与我的 .NET 服务的交互引起的。无论如何,我想我需要弄清楚这些消息是如何写入 Windows 的应急工作周从那里,尝试找到 C 代码中哪里有一个钩子或一段代码可以为给定的 ETW 监听器提供信息。
- 这是正确的方法吗?还有其他更短的替代方案吗?我还遗漏了什么吗?
- 无法找到关于
0x26
错误/0xc000038e
状态代码含义的确切信息。是否有特定的资源? - 有没有办法我可以将这些错误实例的数据转储到类似的工具中Windows 调试器因此它会加载所有相关部分的状态 - 也许有帮助?
- 识别此特定设备的已安装驱动程序 - 并搜索它最终写入的日志?