确定哪个进程正在使用DirectShow过滤器并将其终止?

时间:2011-05-18 04:02:53

标签: directshow

有没有办法确定哪个进程正在使用特定的DirectShow过滤器?特别是视频捕获过滤器。

如果我们的应用程序因尝试使用DirectShow过滤器而抛出异常,因为它已经在使用中,我们希望识别正在使用过滤器的进程并将其终止。当然,这不是通用或分布式应用程序,而是安装在专用计算机上,其唯一目的是运行我们的应用程序。

谢谢,

1 个答案:

答案 0 :(得分:1)

理想情况下,我认为应该尽一切可能避免杀死一个过程......结果可能会发生很多坏事。也就是说,我的建议依赖于5个部分:

  1. 在文件系统中找到fitler dll文件。
  2. 枚举所有流程
  3. 通知每个进程的所有已加载模块
  4. 确定哪个进程正在使用过滤器。
  5. 杀死这个过程。
  6. 由于您没有指定任何语言或编程框架,我将假设C#/ .net只是为了方便。

    1- DirectShow过滤器只是COM对象,因此它们在系统中注册。您需要找出过滤器的GUI,使用此GUID,您可以找到存储此对象信息的注册表项,然后您可以从那里检索文件系统中的dll的位置。 Microsoft.Win32.Registry可用于访问注册表。

    2- System.Diagnostics.Process.GetProcesses()可用于枚举所有正在运行的进程。

    3- System.Diagnostics.Process.Modules可用于枚举流程加载的所有模块(dll)。

    其余步骤应该是微不足道的。