Windows 10 Camera frame server,识别使用网络摄像头的实际应用

Windows 10 Camera frame server, identify actual app using webcam

在 windows 10 上,需要访问网络摄像头的应用程序与 frame server 通信,后者是在 svchost.

下运行的服务

我过滤掉网络摄像头流,我得到的进程 ID 是 svchost。我想确定正在使用网络摄像头的实际进程。

是否有明确的方法以编程方式识别使用网络摄像头的实际应用程序是什么? 我已经研究了进程的枚举句柄(也必须处理 NtQueryObject() 挂起),但我正在寻找一个更好的明确解决方案。

据我所知,没有现成的 API 可以直接帮助你。您可以使用进程资源管理器获取网络摄像头的句柄值,然后使用 like EnumProcessModulesEx 枚举进程的所有打开句柄并检查哪个应用程序正在使用此网络摄像头。

这里有一个打开文件查找的例子,你可以参考一下。 https://www.codeproject.com/Articles/18975/Listing-Used-Files

此致, 男爵

我怀疑您能否识别使用帧服务器捕获视频的应用程序(好吧,实际上这同样适用于那些在当前或旧版本 Windows 中不使用帧服务器的应用程序)。

Microsoft 添加了帧服务器以在视频捕获应用程序和实现此类捕获的实际驱动程序之间插入代理。尽管声明的意图是在应用程序之间共享摄像机设备,但我不认为它是可操作的,而且框架服务器几乎完全没有记录。我个人的理解是,Microsoft 需要以方便的方式接入,以便为他们的 Windows Hello 技术启用对摄像机的访问,因此他们准备了媒体管道。没有采取进一步措施为用户应用程序提供任何新选项。

试图共享网络摄像头的简约桌面视频捕获应用程序仍然收到一个失败,表明通用应用程序无法共享(我猜微软的像 Hello 可能在框架服务器中有一个未记录的后门用于摄像头共享,或者或者为特定 class 的客户端启用共享,例如使用捕获引擎 API 或类似的):

也就是说,没有 API 枚举框架服务器客户端,整个应用程序甚至不知道它们是在与真正的驱动程序还是框架服务器代理对话。

我认为间接获取相关信息的尝试,例如通过检查哪些应用程序使用视频相关模块,是不可靠的,并且在多个视频捕获设备(包括虚拟设备)的情况下更加混乱。