【问题标题】:Accessing device configuration space - win kernel PCI device访问设备配置空间——win内核PCI设备
【发布时间】:2012-07-06 09:57:20
【问题描述】:

我正在编写获取 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);

谁能告诉我这有什么问题,(我从驱动程序条目中调用它,并传递当前安装驱动程序的设备对象。)

【问题讨论】:

  • 我应该从我的“PCI 设备堆栈”驱动程序中使用它,例如PCI功能驱动程序...并使用那个...我的pdo是NULL ...我认为它可以从总线#,功能#,设备#生成。 ..但我错了...

标签: windows kernel device-driver wdk pci


【解决方案1】:

DriverEntry() 中没有有效的 PDO。 DriverEntry 大致对应于用户空间应用程序中的main(),在驱动程序加载到内存后首先被调用。 DriverEntry 主要目的是向操作系统注册驱动程序,其代码独立于实际设备。只有在操作系统调用了您的初始化回调之后(在它识别出您的设备之后),您才能拥有一个 PDO - 并且在 DriverEntry 完成后将调用回调(实际上,回调应该作为内部驱动程序注册的一部分提供给操作系统DriverEntry())。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-16
    • 1970-01-01
    • 2020-05-02
    • 2014-09-15
    相关资源
    最近更新 更多