我正在编写方法以获取pci设备,给定供应商ID,以编程方式获取设备ID(就像Linux内核中的pci_get_device一样)。
为此,我需要获取设备对象配置。我从这里读到同样的东西:http://msdn.microsoft.com/en-us/library/windows/hardware/ff558707(v=vs.85).aspx
现在为了测试这一点,我制作了假驱动程序 - 服务安装框架,它将安装我的 I/O 设备驱动程序,并且可以从 DriverEntry 测试此 PCI 功能。
但是操作系统崩溃了,irql_not_less_or_equal,在
irp = IoBuildSynchronousFsdRequest(IRP_MJ_PNP,
targetObject,
NULL,
0,
NULL,
&event,
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> &ioStatusBlock);
谁能告诉我这有什么问题,(我从驱动程序条目调用它,并传递当前安装驱动程序的设备对象。
您在DriverEntry()
中没有有效的 PDO。 DriverEntry
大致对应于用户空间应用程序中的main()
,并且在驱动程序加载到内存后称为第一件事。 DriverEntry
主要目的是向操作系统注册驱动程序,其代码独立于实际设备。只有在操作系统调用了初始化回调(在它识别了您的设备之后)之后,您才能拥有 PDO - 并且回调将在 DriverEntry 完成后调用(实际上,回调应作为DriverEntry()
内驱动程序注册的一部分提供给操作系统)。