C# 以编程方式在C/.NET中查找使用特定USB设备(通过设备ID)的进程

C# 以编程方式在C/.NET中查找使用特定USB设备(通过设备ID)的进程,c#,.net,windows,winapi,C#,.net,Windows,Winapi,我和我的小组正在开发一个C/.NET程序,该程序将显示哪些进程正在使用用户的网络摄像头和/或麦克风,基本上是一个隐私检查器。我们能够显示所有USB设备及其属性,例如设备ID。然而,我们正在努力找出如何通过设备ID查找正在使用它们的进程。我们正在尝试做一些类似于Process Explorer的查找句柄或DLL功能的事情 这是我们到目前为止的测试代码。它显示有关连接到计算机的所有USB设备的信息: namespace PrivacyHub { /// <summary>

我和我的小组正在开发一个C/.NET程序,该程序将显示哪些进程正在使用用户的网络摄像头和/或麦克风,基本上是一个隐私检查器。我们能够显示所有USB设备及其属性,例如设备ID。然而,我们正在努力找出如何通过设备ID查找正在使用它们的进程。我们正在尝试做一些类似于Process Explorer的查找句柄或DLL功能的事情

这是我们到目前为止的测试代码。它显示有关连接到计算机的所有USB设备的信息:

namespace PrivacyHub
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();

            ManagementObjectCollection collection;
            using (var searcher = new ManagementObjectSearcher(@"Select * from Win32_USBControllerDevice"))
                collection = searcher.Get();

            foreach(var device in collection) {
                string curDeviceInfo = (string)device.GetPropertyValue("Dependent");
                string usbAddress = (curDeviceInfo.Split(new String[] { "DeviceID=" }, 2, StringSplitOptions.None)[1]);

                ManagementObjectCollection devices;
                using (var searcher = new ManagementObjectSearcher("Select * from Win32_PnPEntity where PNPDeviceID = " + usbAddress))
                    devices = searcher.Get();

                foreach(var usbDevice in devices) {
                    Console.WriteLine("----------------DEVICE---------------");
                    foreach(var property in usbDevice.Properties)
                        Console.WriteLine(property.Name + ": " + property.Value);
                    Console.WriteLine("----------------END---------------");
                }

                devices.Dispose();
            }

            
            collection.Dispose();
            
        }
    }
}

我已经查看了Win32 API文档,但没有找到任何关于如何执行此操作的信息。也许我错过了什么。有人知道如何使用这些设备以编程方式查找流程吗?

Process Hacker实现了与Process Explorer相同的功能,它是开源的,因此您可以在那里找到一些线索:@AlexK。枚举系统中所有打开的句柄非常简单。为此,不需要寻找过程黑客。但这给了我们什么?