创建资源要求列表
当总线驱动程序检测到子设备时,驱动程序负责为设备创建资源要求列表。 列表中的每个项都是设备的 逻辑配置 。
驱动程序在总线枚举期间报告设备后,框架将调用驱动程序的 EvtDeviceResourceRequirementsQuery 回调函数。 此回调函数接收表示空资源要求列表的 resource-requirements-list 对象的句柄。
然后,驱动程序必须执行以下操作才能将信息添加到资源要求列表:
创建空的逻辑配置。
对于驱动程序将指定的每个逻辑配置,驱动程序必须调用 WdfIoResourceListCreate 来创建空的逻辑配置。
将资源描述符添加到逻辑配置。
若要将资源描述符添加到逻辑配置,驱动程序必须针对设备所需的每种类型的硬件资源执行以下操作:
- 填写驱动程序分配 的IO_RESOURCE_DESCRIPTOR 结构,该结构指定特定资源的有效值范围。
- 调用 WdfIoResourceListAppendDescriptor 或 WdfIoResourceListInsertDescriptor 将IO_RESOURCE_DESCRIPTOR结构的内容添加到逻辑配置中。
如果设备使用资源类型的多个实例,则堆栈中访问资源的所有驱动程序都必须知道资源的添加顺序。 例如,如果设备需要两个 I/O 端口地址范围,则访问资源描述符的所有驱动程序都必须知道这两个范围添加到逻辑配置的顺序。
将逻辑配置添加到资源要求列表。
若要将逻辑配置添加到设备的资源要求列表,驱动程序调用 WdfIoResourceRequirementsListAppendIoResList 或 WdfIoResourceRequirementsListInsertIoResList。
将资源分配给设备时,PnP 管理器会尝试匹配列表中第一个逻辑配置的要求。 如果该配置所需的资源不可用,则 PnP 管理器将匹配可用的资源的列表中的下一个配置。
如果驱动程序支持非 PnP 设备,则驱动程序通常还必须调用 WdfIoResourceRequirementsListSetSlotNumber 和 WdfIoResourceRequirementsListSetInterfaceType。
驱动程序的 EvtDeviceResourceResourceRequirementsQuery 回调函数返回后,框架会将资源要求列表传递给 PnP 管理器。