修改资源要求列表
PnP 管理器确保已加载新连接设备的所有驱动程序后,会将设备的硬件要求列表发送到设备的驱动程序堆栈。
当列表在堆栈中向下移动时,框架调用每个函数和筛选器驱动程序的 EvtDeviceFilterRemoveResourceRequirements 回调函数,并将硬件要求列表作为输入参数传递。 此回调函数可以从总线驱动程序指定的硬件要求列表中删除硬件资源,但函数驱动程序确定设备运行不必要。
例如,PCI 总线驱动程序可能会根据 PCI 规范复制内存空间中的 I/O 空间资源。 如果设备可以在不使用 I/O 空间资源的情况下运行,则设备的功能驱动程序可以从硬件要求列表中删除 I/O 空间资源。
若要从要求列表中删除项,驱动程序可以执行以下操作:
- 调用以下方法来修改资源要求列表中的逻辑配置:
- WdfIoResourceRequirementsListGetCount,用于获取逻辑配置的数量。
- WdfIoResourceRequirementsListGetIoResList,用于获取对逻辑配置的访问权限。
- WdfIoResourceRequirementsListRemove 和 WdfIoResourceRequirementsListRemoveByIoResList,以删除逻辑配置。
- 调用以下方法来修改逻辑配置中的资源描述符:
- WdfIoResourceListGetCount,用于获取资源描述符的数量。
- WdfIoResourceListGetDescriptor,用于获取对资源描述符的访问权限。
- WdfIoResourceListRemove 和 WdfIoResourceListRemoveByDescriptor,用于删除资源描述符。
当列表备份驱动程序堆栈时,框架会调用每个函数并筛选驱动程序的 EvtDeviceFilterAddResourceRequirements 回调函数,并将硬件要求列表作为输入参数传递。 此回调函数可以添加函数驱动程序使设备正常运行所需的其他硬件资源。
若要将项添加到硬件要求列表,驱动程序可以执行以下操作:
- 调用以下方法来修改资源要求列表中的逻辑配置:
- WdfIoResourceRequirementsListGetCount,用于获取逻辑配置的数量。
- WdfIoResourceRequirementsListGetIoResList,用于获取对逻辑配置的访问权限。
- WdfIoResourceListCreate,用于创建新的逻辑配置。
- WdfIoResourceRequirementsListAppendIoResList 或 WdfIoResourceRequirementsListInsertIoResList,以添加新的逻辑配置。
- 调用以下方法来修改逻辑配置中的资源描述符:
- WdfIoResourceListGetCount,用于获取资源描述符的数量。
- WdfIoResourceListGetDescriptor,用于获取对资源描述符的访问权限。
- WdfIoResourceListAppendDescriptor 或 WdfIoResourceListInsertDescriptor,用于添加资源描述符。