音频处理对象APO
+ -

SWAP APO inf文件信息

2022-09-19 185 0

SWAP APO编译后的主体为swapapo.dll
这里参考ComponentizedApoSample.inf文件的部分节选说明。
inf文件的方体结构和普通的驱动INF文件一致,其结构如下:
ComponentizedApoSample.inf

这里关于APO的注册关键是注册表Apo_AddReg相关的。
这里先将各个UUID之间的关系说明一下:
UUID之间的关系

[Apo_AddReg]
; Swap Stream effect APO COM registration
HKCR,CLSID\%SWAP_FX_STREAM_CLSID%,,,%SFX_FriendlyName%
HKCR,CLSID\%SWAP_FX_STREAM_CLSID%\InProcServer32,,0x00020000,%13%\swapapo.dll
HKCR,CLSID\%SWAP_FX_STREAM_CLSID%\InProcServer32,ThreadingModel,,"Both"

; Swap Mode effect APO COM registration
HKCR,CLSID\%SWAP_FX_MODE_CLSID%,,,%MFX_FriendlyName%
HKCR,CLSID\%SWAP_FX_MODE_CLSID%\InProcServer32,,0x00020000,%13%\swapapo.dll
HKCR,CLSID\%SWAP_FX_MODE_CLSID%\InProcServer32,ThreadingModel,,"Both"

; Swap Stream effect APO registration
HKR,AudioEngine\AudioProcessingObjects\%SWAP_FX_STREAM_CLSID%,"FriendlyName",,%SFX_FriendlyName%
HKR,AudioEngine\AudioProcessingObjects\%SWAP_FX_STREAM_CLSID%,"Copyright",,%Copyright%
HKR,AudioEngine\AudioProcessingObjects\%SWAP_FX_STREAM_CLSID%,"MajorVersion",0x00010001,1
HKR,AudioEngine\AudioProcessingObjects\%SWAP_FX_STREAM_CLSID%,"MinorVersion",0x00010001,1
HKR,AudioEngine\AudioProcessingObjects\%SWAP_FX_STREAM_CLSID%,"Flags",0x00010001,%APO_FLAG_DEFAULT%
HKR,AudioEngine\AudioProcessingObjects\%SWAP_FX_STREAM_CLSID%,"MinInputConnections",0x00010001,1
HKR,AudioEngine\AudioProcessingObjects\%SWAP_FX_STREAM_CLSID%,"MaxInputConnections",0x00010001,1
HKR,AudioEngine\AudioProcessingObjects\%SWAP_FX_STREAM_CLSID%,"MinOutputConnections",0x00010001,1
HKR,AudioEngine\AudioProcessingObjects\%SWAP_FX_STREAM_CLSID%,"MaxOutputConnections",0x00010001,1
HKR,AudioEngine\AudioProcessingObjects\%SWAP_FX_STREAM_CLSID%,"MaxInstances",0x00010001,0xffffffff
HKR,AudioEngine\AudioProcessingObjects\%SWAP_FX_STREAM_CLSID%,"NumAPOInterfaces",0x00010001,1
HKR,AudioEngine\AudioProcessingObjects\%SWAP_FX_STREAM_CLSID%,"APOInterface0",,"{FD7F2B29-24D0-4B5C-B177-592C39F9CA10}"

; Swap Mode effect APO registration
HKR,AudioEngine\AudioProcessingObjects\%SWAP_FX_MODE_CLSID%,"FriendlyName",,%MFX_FriendlyName%
HKR,AudioEngine\AudioProcessingObjects\%SWAP_FX_MODE_CLSID%,"Copyright",,%Copyright%
HKR,AudioEngine\AudioProcessingObjects\%SWAP_FX_MODE_CLSID%,"MajorVersion",0x00010001,1
HKR,AudioEngine\AudioProcessingObjects\%SWAP_FX_MODE_CLSID%,"MinorVersion",0x00010001,1
HKR,AudioEngine\AudioProcessingObjects\%SWAP_FX_MODE_CLSID%,"Flags", 0x00010001,%APO_FLAG_DEFAULT%
HKR,AudioEngine\AudioProcessingObjects\%SWAP_FX_MODE_CLSID%,"MinInputConnections",0x00010001,1
HKR,AudioEngine\AudioProcessingObjects\%SWAP_FX_MODE_CLSID%,"MaxInputConnections",0x00010001,1
HKR,AudioEngine\AudioProcessingObjects\%SWAP_FX_MODE_CLSID%,"MinOutputConnections",0x00010001,1
HKR,AudioEngine\AudioProcessingObjects\%SWAP_FX_MODE_CLSID%,"MaxOutputConnections",0x00010001,1
HKR,AudioEngine\AudioProcessingObjects\%SWAP_FX_MODE_CLSID%,"MaxInstances",0x00010001,0xffffffff
HKR,AudioEngine\AudioProcessingObjects\%SWAP_FX_MODE_CLSID%,"NumAPOInterfaces",0x00010001,1
HKR,AudioEngine\AudioProcessingObjects\%SWAP_FX_MODE_CLSID%,"APOInterface0",,"{FD7F2B29-24D0-4B5C-B177-592C39F9CA10}"

...

[Strings]
MfgName           = "TODO-Set-Manufacturer"
ProviderName      = "TODO-Set-Provider"
Apo.ComponentDesc = "Audio Proxy APO Sample"

; Driver developers would replace these CLSIDs with those of their own APOs
SWAP_FX_STREAM_CLSID   = "{B48DEA3F-D962-425a-8D9A-9A5BB37A9904}" 
SWAP_FX_MODE_CLSID     = "{06687E71-F043-403A-BF49-CB591BA6E103}"  
DELAY_FX_STREAM_CLSID  = "{77802b45-a5a0-455a-8204-3dba30eee7b4}"
DELAY_FX_MODE_CLSID    = "{b6c7032b-1f17-4cc6-bcdb-fd96deabc8a9}"
KWS_FX_ENDPOINT_CLSID   = "{9D89F614-F9D6-40DD-9F21-5E69FA3981ED}"

; see audioenginebaseapo.idl for APO_FLAG enum values
APO_FLAG_DEFAULT  = 0x0000000e

SFX_FriendlyName  = "Audio Proxy APO Sample (stream effect)"
MFX_FriendlyName  = "Audio Proxy APO Sample (mode effect)"
KWS_FriendlyName  = "Keyword Spotter APO Sample (endpoint effect)"
Copyright         = "Sample"

最终在注册表中的信息如下:

HKEY_CLASSES_ROOT/CLSID

  • SWAP_FX_MODE_CLSID
    SWAP_FX_MODE_CLSID

  • SWAP_FX_STREAM_CLSID
    SWAP_FX_STREAM_CLSID

COMM ProgID简介: http://www.pnpon.com/article/detail-332.html

HKR - AudioEngine

这里的%ClassGuid%为version中的GUID={5989fce8-9cd0-467d-8a6a-5419e31529d4},所以分别为:
SWAP_FX_MODE_CLSID
SWAP_FX_STREAM_CLSID

0 篇笔记 写笔记

Windows驱动注册表写数据
实际上注册表的写入比读取要简单。因为这省略了一个尝试数据的大小的过程。直接将数据写入即可。写入值一般使用函数ZwSetValueKey 。这个函数的原型如下:NTSTATUS ZwSetValueKey( IN HANDLE KeyHandle, IN PUNICODE_STRI......
Windows驱动读注册表数据
一般使用ZwQueryValueKey来读取注册表中键的值。要注意的是注册表中的值可能有多种数据类型。而且长度也是没有定数的。为此,在读取过程中,就可能要面对很多种可能的情况。ZwQueryValueKey这个函数的原型如下:NTSTATUS ZwQueryValueKey( IN HAN......
Windows修改注册表使应用程序开机自动运行
先向大家介绍能让WINDOWS自动启动的2个文件和8个注册键1: 当前用户专用的启动文件夹 将快捷方式放入WINDOWS的用户启动文件夹中.在开始菜单的启动文件夹上,右键选中“打开”菜单如在本机win7 x64下为:C:/Users/Administrator/AppData/Roaming/M......
Windows内核打开注册表
和在应用程序中编程的方式类似,注册表是一个巨大的树形结构。操作一般都是打开某个子键。子键下有若干个值可以获得。每一个值有一个名字。值有不同的类型。一般需要查询才能获得其类型。子键一般用一个路径来表示。和应用程序编程的一点重大不同是这个路径的写法不一样。一般应用编程中需要提供一个根子键的句柄。而驱动......
读写注册表SetRegisterValue和GetRegisterValue
注册表DWORD CUtils::SetRegisterValue(HKEY key, LPCSTR path, LPCSTR name, LPBYTE pData, ULONG nLen, DWORD type){ HKEY hKey = NULL; DWORD err = ......
Windows下注册ASIO
在带有WOW6432 ASIO的Windows 64位系统上,32位和64位主机应用程序都可以使用ASIO。要求ASIO驱动程序的COM部分以32位和64位二进制形式提供32位主机应用程序将查询32位Windows注册表部分(Wow6432)。64位主机应用程序将查询普通Windows注册表。A......
ASIO asiosample.dll注册及注册表信息变化
在Windows下注册ASIO一节中,是需要对COM进入注册的。故我们使用Regsvr32命令注册。如:K:usbzhasioasiosdk_2.3.3_2019-06-14driverasiosampleasiosampleDebug>REGSVR32 asiosample.......
SetupAPI根据硬件ID获取驱动INF文件和驱动日期版本信息
SetupAPI根据硬件ID获取驱动INF文件和驱动日期版本信息。注释掉的代码是获取该硬件的所有可用驱动信息。代码是逐渐完善的,没想到可以直接从注册表信息中获取到。SetupDiOpenDevRegKey打开的注册表路径示例为:计算机HKEY_LOCAL_MACHINESYSTEM......
SetupDiGetDeviceRegistryProperty函数使用示例
通过SetupDiOpenDeviceInterface函数打开设备路径,在通过SetupDiGetDeviceInterfaceDetail函数获取SP_DEVINFO_DATA结构的值,有了这个结构的值就可以调用SetupDiGetDeviceRegistryProperty函数获取设备的一系列......
Windows驱动中读取注册表中的DWORD32值
ULONG GetRegisterMicChannelDWORD32(){ HANDLE hHandle = NULL; OBJECT_ATTRIBUTES oa; NTSTATUS statues; UNICODE_STRING path; UNICOD......
COMM CSID和GUID
Office的Word中可以插入EXCEL数据,我们知道是通过Word存储的复合文件功能来实现的。那么当WORD程序读取复合文件,遇到EXCEL数据时,它该如何启动Excel呢?启动后,又如何让Excel自己去读入、解析、显示xls数据呢?CLSID概念有一个非常简单的解决方案,那就是在对象数据的......
COMM ProgID简介
每一个COM组件都需要指定一个CLSID。之所以使用16个字节,就是从概率上保证不重复。为使用方便,也支持另一个字符串名称方式,叫ProgID。见下图注册表的ProgID子键。由于CLSID和ProgID是一个概念的两个不同的表示形式,所以在程序中可随便使用任一种。CLSID和ProgID之间的......
COMM 接口简介
知道了CLSID或ProgID唯一地表示一个组件服务程序,那么根据这些ID,就可加载运行组件,并为客户端程序提供服务。启动组件程序的方法,会陆续介绍。接下来先讨论如何调用组件提供的函数?接口。作为客户端程序员,希望或要求:写一个程序时,不做任何修改可调用任意一个组件。举例来说:在Word中可嵌......
Windows驱动注册表(硬件、服务、类)项详解
Windows驱动有三种注册表键负责配置。它们是硬件(或实例), 类和 服务。硬件(或实例)键包含单个设备的信息。类键涉及所有相同类型设备的共同信息。服务键包含驱动程序信息。注册表路径 硬件(hardware)键[HKEY_LOCAL_MACHINESYSTEMCurr......
INF文件中HKR
在Windows驱动的注册表中,AddReg用于添加注册表项,其中有一些通用的缩写:HKCR代表HKEY_CLASSES_ROOT;HKCU代表HKEY_CURRENT_USER;HKLM代表HKEY_LOCAL_MACHINEHKU代表HKEY_USERS不过,我们有时会经常见到的是HKR,......
作者信息
我爱内核
Windows驱动开发,网站开发
好好学习,天天向上。
取消
感谢您的支持,我会继续努力的!
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

您的支持,是我们前进的动力!