音频处理对象APO
+ -

APO动态库DLL文件的路径问题

2022-09-30 245 0

APO DLL注册路径

APO的DLL文件是通过regsvr32注册表的。比如:

regsvr32.exe xxAPO.dll

这样在注册表HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID就会记录该文件的GUID的路径。

该GUIDPKEY_FX_*EffectClsid属性的字符串值是CLSID,它标识要实例化以过滤音频信号的特定APO COM类。CLSID是全球唯一的,由sAPO开发人员设置。因此即使在不同的机器和操作系统版本上,它们也可以保持一致。

安装sAPO后,它将在系统范围的COM类存储中注册,该存储位于HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID,以便可以通过其CLSID查找它。

例如,以下命令将查找有关CLSID{EC1CC9CE-FAED-4822-828A-82A81A6F018F}(Equalizer APO)的信息:

$RegistryKey = Get-Item "HKLM:\SOFTWARE\Classes\CLSID\{EC1CC9CE-FAED-4822-828A-82A81A6F018F}"
$RegistryKey.GetValue("")
$RegistryKey.OpenSubKey("InprocServer32").GetValue("")

输出内容为:

EqualizerAPO Post-Mix Class
C:\Program Files\EqualizerAPO\EqualizerAPO.dll

在本例中,EqualizerAPO是包含sAPO代码的dll。Windows音频引擎audiodg.exe进程将加载该DLL以实例化过滤器并处理音频。

APO DLL路径限制

实际上在不同的系统中,这个DLL路径有有些不同的。
比如本人在Windows10 1607系统中,是可以将该DLL在用户桌面注册并加载的。但是在1809系统中,系统会因为无权该问用户目录而加载DLL失败。这是因为:APO运行于audiodg.exe进程内部,而该进程本身在Windows音频服务(Audiosrv)下运行。与几乎所有服务一样,此服务不在您的普通Windows用户帐户下运行。相反,它的访问令牌授予它的权限大致相当于LocalService帐户。所以出于安全和隔离原因,该服务无法访问您的用户目录(即C:\Users\<username>)

在某些情况下,这可能导致APO行为失常,因为它试图打开一个不允许访问的文件(或其他安全对象,如注册表项)。
一个示例是将均衡器APO配置文件存储在用户目录中。在这种情况下,均衡器APO配置编辑器将显示一个有用的警告,APO本身将在其日志文件(C:\Windows\ServiceProfiles\LocalService\AppData\Local\Temp\EqualizerAPO.log)中记录一条错误消息。

下面使用Process Monitor来排查APO的加载权限:
使用的过滤条件为:

  • “Process Name” is audiodg.exe
  • “Result” is ACCESS DENIED

然后重新启动Windows音频服务AudioSvr并开始流式播放音频。然后,访问被拒绝错误应出现在Process Monitor中。
以下示例显示Equalizer APO试图打开无法访问的配置文件:
Process Monitor

通过查看Process Monitor中的事件堆栈,可以确定哪个DLL正在进行有问题的调用。在本例中,它是EqualizerAPO.dll,如预期。如果故障源于Equalizer APO中使用的VST,则堆栈应在Equalifier APO旁边(或代替)提及有问题的VST DLL。

144812178758

可以使用2种方法来解决这个访问权限问题:

  • 将有问题的文件/对象移动到音频服务可以访问的位置。例如Program Files或ProgramData。或者:
  • 更改有问题的文件/对象的权限(DACL),以允许音频服务访问。

要调整权限,请转到有问题的文件/对象(或父对象)的安全属性,并确保NT SERVICE\Audiosrv用户主体具有访问权限。(此主体是服务SID。您也可以使用本地服务帐户,但只允许Windows音频服务更干净。)
145054445922

然后重新启动Windows音频服务。

注意:虽然此技术可用于在标准配置目录之外存储Equalizer APO配置文件,但请记住,这样做将破坏Equalifier APO的“即时模式”功能(即实时更改),因为Equalize APO仅监视其配置目录的更改。

0 篇笔记 写笔记

windows服务启动选项
dwStartType服务启动选项。此参数可以是下列值之一:宏值含义SERVICE_AUTO_START0x00000002系统启动时由服务控制管理器自动启动该服务程序。SERVICE_BOOT_START0x00000000用于由系统加载器创建的设备驱动程序。只......
重启Windows系统服务,包括依赖服务的启动
重启Windows系统服务,包括依赖服务的启动.如重启远程访问的服务: TCHAR* Service=TEXT("TermService"); DWORD err = RestartSerivce(Service);代码如下#include
Office的Word中可以插入EXCEL数据,我们知道是通过Word存储的复合文件功能来实现的。那么当WORD程序读取复合文件,遇到EXCEL数据时,它该如何启动Excel呢?启动后,又如何让Excel自己去读入、解析、显示xls数据呢?CLSID概念有一个非常简单的解决方案,那就是在对象数据的......
每一个COM组件都需要指定一个CLSID。之所以使用16个字节,就是从概率上保证不重复。为使用方便,也支持另一个字符串名称方式,叫ProgID。见下图注册表的ProgID子键。由于CLSID和ProgID是一个概念的两个不同的表示形式,所以在程序中可随便使用任一种。CLSID和ProgID之间的......
知道了CLSID或ProgID唯一地表示一个组件服务程序,那么根据这些ID,就可加载运行组件,并为客户端程序提供服务。启动组件程序的方法,会陆续介绍。接下来先讨论如何调用组件提供的函数?接口。作为客户端程序员,希望或要求:写一个程序时,不做任何修改可调用任意一个组件。举例来说:在Word中可嵌......
Windows驱动有三种注册表键负责配置。它们是硬件(或实例), 类和 服务。硬件(或实例)键包含单个设备的信息。类键涉及所有相同类型设备的共同信息。服务键包含驱动程序信息。注册表路径 硬件(hardware)键[HKEY_LOCAL_MACHINESYSTEMCurr......
APO代表“音频处理对象”。它是一个API和框架,由Microsoft设计,用于构建可插拔的音频过滤器(DSP)。原则上它与VST非常相似。Window音频处理对象APO用于实现对系统的声卡的数据处理,通过处理,可以实现用户自定义的均衡器、混响、颤音、回声消除 (AEC) 和自动增益控制 (AGC......
自定义音频处理对象APO的步骤:创建自定义 APO com 对象以提供所需的音频处理对象。创建用户界面以使用配置自定义 APO(可选)。创建 INF 文件以安装和注册 APO 和自定义用户界面。APO 必须有一个输入和一个输出连接。这些连接是音频缓冲区,可以有多个通道。APO 只能修改通过其I......
SwapAPO是微软自带的一个APO工程,其功能实现的是左右声道的数据交换。具有很强的参考意义。工程源代码地址位于:https://github.com/Microsoft/Windows-driver-samples/tree/main/audio/sysvadSwapAPO工程配置工程目录如下......
总目录为SwapAPODlllib,其UUIP定义为:// SwapAPODlllib//[ uuid(7092F0B2-D28D-4095-95A7-6C37A97432A2), version(1.0)]其包含2个COM类,分别为SFX和MFXlibrary Swap......
SWAP APO编译后的主体为swapapo.dll这里参考ComponentizedApoSample.inf文件的部分节选说明。inf文件的方体结构和普通的驱动INF文件一致,其结构如下:这里关于APO的注册关键是注册表Apo_AddReg相关的。这里先将各个UUID之间的关系说明一下:[A......
Windows 音效处理大致分为SFX,MFX,EFX, 按照顺序,依次处理。下面是如何移除这些模块的方法:打开设备管理器-音频输入输出设备,找到要修改的设备,右键属性-详情,在属性列表框里选择 设备实例路径,有如下值,记录红色部分SWDMMDEVAPI{0.0.0.00000000}.{0......
打开注册表:HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionAudio创建注册表项:DisableProtectedAudioDG = 1 (DWORD)......
Windows控制台下以管理员运行:sc config audiosrv type= own然后重新启动电脑,这样系统就会出现一个AudioSvr......
Equalizer APO是一款图形参数化的Windows音频均衡器,它的实现技术实现是基于Vista系统的 Audio Processing Object(APO)。Equalizer APO特征过滤器的数量实际上是无限的适用于任何数量的频道非常低的延迟,这使得它适合于交互式应用程序CPU使用......
作者信息
我爱内核
Windows驱动开发,网站开发
好好学习,天天向上。
取消
感谢您的支持,我会继续努力的!
扫码支持
扫码打赏,你说多少就多少

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

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