1

当我尝试在我的 C# 程序中使用 com 端口时,有时该端口已打开并被另一个程序使用。我想具体一点并生成这样的警告消息:

"COM1端口被其他名为 的程序使用SomeApplication。您是否要关闭该程序(请注意,您可能会丢失数据或其他后果)?"-Yes -No

如何在 C# 中实现这个场景?

4

1 回答 1

3

这在 Windows 上不受支持,它需要遍历只能在内核代码中访问的未记录内核结构。隐藏此信息是非常有目的的,它会阻止程序完全按照您的计划执行,终止进程以获取资源。通常是针对试图利用句柄回收攻击的恶意软件的对策。

您的用户可以使用 SysInternals 的 Handle 实用程序来查找该进程,假设他不知道哪个应该是罕见的。执行 Handle.exe 在 C# 代码中所做的事情是一个非常漫长的过程,您永远不应该承诺。它动态安装设备驱动程序,因此它可以获得 ring 0 访问内核数据的权限。并且内核结构在 Windows 版本之间发生了变化,并且在未来的版本中可能会再次发生变化。

于 2012-12-25T15:21:37.727 回答