AVStream 子设备

仅当在该平台上安装了 DirectX 9.0 或更高版本时,本部分才适用于 Microsoft Windows Server 2003 和更早版本的操作系统。

AVStream 可以充当设备的总线枚举器,为 Enum 分支中的每个密钥创建一个子设备。 为此,请在注册表中的设备密钥下放置 一个枚举 分支。

具体而言,在驱动程序 INF 文件的 AddReg 部分中,供应商为 Enum 下的每个条目提供类型为 REG_SZ 的值 pnpid。 AVStream 使用此字符串值为每个子设备构造即插即用 (PnP) 硬件 ID。

在 DirectX 9.0 之前的版本中,AVStream 创建“AVStream\<pnpid>”形式的子设备硬件 ID, (其中 <pnpid> 是特定设备) 的 pnpid 值。

例如,供应商在 INF 文件的 AddReg 节中指定以下内容:

[MyTVDevice.AddReg]
HKR,"ENUM\CrossbarDevice",pnpid,,"MyCrossbar"
HKR,"ENUM\TunerDevice",pnpid,,"MyTuner"

因此,AVStream 使用以下设备 ID 创建两个子设备:

AVStream\MyCrossbar

AVStream\MyTuner

若要解决指定相同 pnpid 值的两个不同子设备可能存在的歧义,DirectX 9.0 及更高版本会更改针对每个子设备报告的 ID。 对于父设备报告的每个硬件 ID,AVStream 按以下格式为子设备创建 ID:

AVStream\<pnpid>#<修改的父硬件 ID>

修改后的父硬件 ID 是父硬件 ID,每个反斜杠 (\) 字符替换为数字符号 (#) 。

如果生成的字符串太长,AVStream 会在MAX_DEVICE_ID_LEN个字符处终止 ID 字符串,包括 NULL 终止符。 在 Windows Server 2003 中, cfgmgr32.h 中的此限制设置为 200 个字符。

例如,父设备报告以下硬件 ID:

PCI\VEN_XXXX&DEV_YYYY&SUBSYS_ZZZZZZZZ&REV_VV

PCI\VEN_XXXX&DEV_YYYY&SUBSYS_ZZZZZZZZ

对于具有 MyCrossbarpnpid 密钥的设备,AVStream 会创建以下子设备硬件 ID:

AVStream\MyCrossbar#PCI#VEN_XXXX&DEV_YYYY&SUBSYS_ZZZZZZZZ&REV_VV

AVStream\MyCrossbar#PCI#VEN_XXXX&DEV_YYYY&SUBSYS_ZZZZZZZZ

AVStream 对父设备报告的兼容 ID 使用相同的进程。 AVStream 为以下格式的子设备创建兼容的 ID:

AVStream\<pnpid>#<修改的父兼容 ID>

兼容 ID 的名称修改和长度规则与硬件 ID 的名称修改和长度规则相同。

例如,如果前面所述的父设备报告以下兼容 ID:

PCI\VEN_XXXX&DEV_YYYY&REV_VV

PCI\VEN_XXXX&DEV_YYYY

PCI\VEN_XXXX&CC_ZZZZZZ

PCI\VEN_XXXX&CC_ZZZZ

PCI\VEN_XXXX

PCI\CC_ZZZZZZ

PCI\CC_ZZZZ

MyCrossbar 子设备将通过 AVStream 报告以下兼容 ID:

AVStream\MyCrossbar#PCI#VEN_XXXX&DEV_YYYY&REV_VV

AVStream\MyCrossbar#PCI#VEN_XXXX&DEV_YYYY

AVStream\MyCrossbar#PCI#VEN_XXXX&CC_ZZZZZZ

AVStream\MyCrossbar#PCI#VEN_XXXX&CC_ZZZZ

AVStream\MyCrossbar#PCI#VEN_XXXX

AVStream\MyCrossbar#PCI#CC_ZZZZZZ

AVStream\MyCrossbar#PCI#CC_ZZZZ

AVStream\MyCrossbar

注意 在 DirectX 9.0 及更高版本中,旧硬件 ID AVStream\<pnpid> 仍报告为最低级别的兼容 ID。 因此,旧版驱动程序继续在这些平台上未经修改地工作。 但是,从 DirectX 9.0 版本开始,Microsoft 建议编写利用 AVStream 类总线枚举器的新驱动程序或修改后的驱动程序的供应商使用新的硬件 ID 格式。 驱动程序可以通过在 INF 文件的兼容 ID 列表中包括旧 ID 来支持运行早期版本的 AVStream 的平台。