Winapi Win32 API:确定哪个程序正在使用串行COM端口

Winapi Win32 API:确定哪个程序正在使用串行COM端口,winapi,serial-port,Winapi,Serial Port,Win32API环境。 我需要确定哪个程序正在使用特定的串行COM端口。例如,如果putty已经打开了COM4,而我后来又尝试启动另一个也希望打开COM4的程序,我如何才能发现putty是阻止这一点的程序? 换句话说,假设我已经在系统上安装了所有端口的列表,我如何反向工作以发现哪些程序打开了哪些端口?从系统内部使用。如果不能,操作系统不会告诉您。内核认为它是“禁止的知识”。考虑到使用这些信息的最可能原因是终止所有者进程。用户总是知道,所以只需提供一个良好的诊断信息。在这种不太可能的情况下,如果他

Win32API环境。
我需要确定哪个程序正在使用特定的串行COM端口。例如,如果putty已经打开了COM4,而我后来又尝试启动另一个也希望打开COM4的程序,我如何才能发现putty是阻止这一点的程序?

换句话说,假设我已经在系统上安装了所有端口的列表,我如何反向工作以发现哪些程序打开了哪些端口?

从系统内部使用。如果不能,操作系统不会告诉您。内核认为它是“禁止的知识”。考虑到使用这些信息的最可能原因是终止所有者进程。用户总是知道,所以只需提供一个良好的诊断信息。在这种不太可能的情况下,如果他的flabber已经完成了,那么他可以始终使用SysInternals的Handle实用程序,尽管我认为它没有列出串行端口。Hans:必须能够以编程方式实现我想要的功能,因为Process Explorer可以做到这一点。PE可以告诉您哪些\设备与进程相关联,然后了解\设备,通过排除,您可以发现串行COM端口名(注册表中定义了\设备名与其值之间的关联)。我只需要一些指向Win32API函数的指针就可以了。您只能通过使用IoGetDeviceObjectPointer和KphQueryNameFileObject函数的特殊内核模式驱动程序来完成。这个过程并不简单。@i您可以通过查看.EXE中的导入列表,在process Explorer(或任何其他显示COM端口句柄使用情况的程序)上执行一些反向工程。您将能够消除大部分导入,因为这显然与获取打开句柄信息无关。希望这将使您剩下相对较少的API进行调查。