资源列表对象
PortCls 系统驱动程序实现 IResourceList 接口,以实现微型端口驱动程序的优势。 IResourceList 对象表示配置资源列表,它是即插即用管理器在设备启动时分配给设备的系统硬件资源的列表。 有关启动时的资源分配的详细信息,请参阅 “在函数驱动程序中启动设备”。
资源列表包含以下类型的资源:
中断向量
DMA 通道
I/O 端口地址
总线相对内存地址块
有关资源类型的信息,请参阅 硬件资源。
IResourceList 对象封装资源列表的已翻译版本和未转换版本(或“raw”)。 有关已转换和未传输的资源的详细信息,请参阅将 总线相对地址映射到虚拟地址。
IResourceList 接口支持以下方法:
IResourceList::AddEntryFromParent
IResourceList::FindTranslatedEntry
IResourceList::FindUntranslatedEntry
IResourceList::NumberOfEntries
IResourceList::NumberOfEntriesOfType
IResourceList::UntranslatedList
头文件 Portcls.h 定义一组宏,以简化资源列表对象的处理。 这些宏生成对 IResourceList 方法的调用。 有关详细信息,请参阅 IResourceList。
此外,Portcls.h 还定义了一对用于创建资源列表的函数:
若要在音频适配器卡上启动设备,操作系统调用适配器驱动程序的启动设备例程(请参阅启动序列),并将资源列表对象作为输入参数传入。 此列表包含操作系统已分配给适配器驱动程序的所有系统资源。
在启动设备例程中,适配器驱动程序启动所有适配器驱动程序的设备(波形设备、MIDI 设备等)。 为了管理每个设备,适配器驱动程序会创建一个微型端口驱动程序对象及其关联的端口驱动程序对象。 适配器驱动程序将资源列表中的资源划分为适配器卡的各个设备。 为此,驱动程序通常会调用 PcNewResourceSublist ,为每个设备创建资源列表对象。 然后,驱动程序会根据需要多次调用 IResourceList::AddEntryFromParent ,将所选资源从父列表复制到各种子列表中。 此外,适配器驱动程序可能会将某些资源分配给自身。
接下来,启动设备例程调用每个端口驱动程序的 IPort::Init 方法,并将设备的资源列表对象(包含子列表)作为输入参数传入。 每个端口驱动程序的 IPort::Init 方法都会调用相应的微型端口驱动程序的 IMiniportXxx::Init 方法,这是下列方法之一:
IPort::Init 方法将其资源列表对象作为输入参数传递给 IMiniportXxx::Init 方法。 然后,微型端口驱动程序可以使用资源列表中的 DMA 通道、中断和其他系统资源。
有关代码示例,请参阅 Microsoft Windows 驱动程序工具包 (WDK) 中的 Sb16 示例音频驱动程序。