首页 > 解决方案 > 您可以在没有管理员的情况下注册 directshow 过滤器吗?

问题描述

我想注册一个不需要管理员的虚拟 directshow 源设备。在另一篇文章中,我看到有人提到您可以通过 HKEY_CURRENT_USER 而不是 HKEY_CLASSES_ROOT 或 HKEY_LOCAL_MACHINE 为每个用户帐户注册 COM 类。这行得通,我可以通过 HKEY_CURRENT_USER\Software\Classes 注册课程而无需 UAC。

要让源/过滤器出现,我需要调用IFilterMapper2::RegisterFilter. 如果没有 UAC 特权,这将失败。( E_ACCESSDENIED General access denied error.)。

Microsoft 并不完全清楚对 RegisterFilter 的调用实际上做了什么。我知道它会在下面创建一个注册表项,HKEY_CLASSES_ROOT\CLSID\category clsid\Instance\filter clsid但其中一个关键值是 FilterData,它是一个二进制值,理论上应该匹配https://docs.microsoft.com/en-us/windows/win32/api/strmif/ns-strmif -regfilter2这个结构;但是数据并没有完全对齐,所以他们也必须在其中写入其他数据。

无论如何要在用户帐户级别注册过滤器?

标签: c++winapicomdirectshow

解决方案


注册信息在下面,HKEY_LOCAL_MACHINE因此您必须拥有本地管理员帐户和提升的权限才能进行注册。


推荐阅读