ACX 版本信息
本主题讨论 ACX 和 KMDF 版本信息。 有关 ACX 的一般概述,请参阅 ACX 音频类扩展概述。
ACX 和 KMDF 版本
使用 !wdfkd.wdfldr 扩展查看 ACX 的版本信息。 !wdfkd.wdfldr 扩展显示有关当前动态绑定到 Windows 驱动程序框架的驱动程序的信息。
!wdfkd.wdfldr Acx01000.sys
版本 1.1
ACX 的当前版本为 1.1,建议用于所有新的驱动程序开发。
下表介绍了 Windows OS 的 ACX 版本支持。
操作系统 | KMDF 版本 | 支持的 ACX 版本 | 版本说明 |
---|---|---|---|
Windows 10 版本 2004 | 最低为 1.31 核 | 1.1 | 初始公开发布。 |
这些 DDI 已在版本 1.1 中添加。
- AcxCircuitGetElementsCount
- AcxCircuitGetPinsCount
- AcxCircuitGetSymbolicLinkName
- AcxCircuitGetNotificationId
- AcxFactoryCircuitGetSymbolicLinkName
- AcxDataFormatListRemoveDataFormats
- AcxPinRemoveModeDataFormatList
- AcxStreamGetElementsCount
- AcxStreamGetNotificationId
- AcxTargetCircuitGetSymbolicLinkName
- AcxTargetPinFlushModeDataFormatListCache
预发布 1.0 版本
不建议使用版本 1.0 进行新的驱动程序开发,但它用于 ACX 驱动程序的早期开发和测试。
操作系统 | KMDF 版本 | 支持的 ACX 版本 | 版本说明 |
---|---|---|---|
Windows 10 版本 1903 | 1.29 | 1.0 | 预发行版。 |
KMDF 版本信息
ACX 对象是 Windows 驱动程序框架 (WDF) 对象 - WDFOBJECT。 有关 WDF 的详细信息,请参阅框架对象简介。 ACX 在运行时绑定到特定版本的 KMDF。 有关详细信息,请参阅 KMDF 版本历史记录。
有关安装不同版本的 WDF/KMDF 的信息,请参阅以下主题:
ACX 在运行时绑定到特定版本的 KMDF。 当 Windows 加载内核模式 WDF 驱动程序时,会将驱动程序动态绑定到 KMDF 运行时库 (WdfMM000.sys)。 多个驱动程序可以共享相同的运行时库 (DLL) 映像,并且两个主要版本的运行时库可以并存。 有关 KMDF 版本控制的信息,请参阅框架库版本控制。
多个 ACX 版本支持
生成音频驱动程序时,可以指定编译时要使用的 ACX 框架的最高和最低版本。 因此,运行时的音频驱动程序可以假定 DDI 的最高/最低版本可用,否则音频驱动程序无法加载。
如果特定 ACX DDI、结构等存在于该版本中,则可以将 ACX 驱动程序编写为在多个 ACX 版本上运行,并在运行时进行调用。 ACX_IS_FUNCTION_AVAILABLE(FunctionName) 可用于查看特定版本的 ACX 中是否提供特定函数。 有关详细信息,请参阅 ACX_IS_FUNCTION_AVAILABLE 宏。
以下代码提供了有关如何检查函数是否可用的示例。
if (ACX_IS_FUNCTION_AVAILABLE( AcxTargetPinFlushModeDataFormatListCache)) {
DbgPrint("Available: AcxTargetPinFlushModeDataFormatListCache\n");
}
else
{
DbgPrint("Not available: AcxTargetPinFlushModeDataFormatListCache\n");
ASSERT(FALSE);
}
还提供这些类似的函数。
ACX_IS_STRUCTURE_AVAILABLE 宏中介绍的 ACX_IS_STRUCTURE_AVAILABLE(StructName)。
ACX_IS_FIELD_AVAILABLE 宏中介绍的 ACX_IS_FIELD_AVAILABLE(StructName, FieldName)。
ACX 还支持ACX_DRIVER_VERSION_AVAILABLE_PARAMS_INIT 函数,该函数可用于检查音频驱动程序的版本信息,如以下代码示例所示。
ACX_DRIVER_VERSION_AVAILABLE_PARAMS_INIT(&ver, 1, 1);
if (!AcxDriverIsVersionAvailable(driver, &ver))
{
ASSERT(FALSE);
goto exit;
}