Windows上

时间:2016-04-16 21:59:36

标签: c++ windows winapi port winsock

编辑:我的问题无法解决。即使人们指责它,也不是重复的。如果你决定对这个问题进行投票,请告诉我原因,所以我能理解。谢谢。

如何强制其他进程关闭当前正在使用的端口。 例如如果Skype正在本地侦听端口80。如何以编程方式强制Skype再次释放该端口,以便我可以在同一端口上正确运行XAMPP?无需更改Skype设置或关闭Skype。

是的,我知道这可能会导致意外行为。

是否只是使用DuplicateObject关闭句柄或者如何完成?

我对关闭流程或找出阻止端口的流程不感兴趣。即使没有netstat,我已经知道它是如何正确完成的。

修改: 我发现WSADuplicateSocket看起来很有希望。但必须从已经拥有Descriptor identifying the local socket的进程调用它,正如微软所称的那样。如果我能以某种方式获得Descriptor identifying the local socket,我可能会在CurrPorts上致电undefined method `name' for nil:NilClass 。这可能是通过代码注入完成的,但我确信有更好的方法。

修改: 据称,一种名为current_user的工具可以做我想做的事情。所以它绝对可能......但是怎么样?

1 个答案:

答案 0 :(得分:0)

从另一个进程访问套接字的正确方法是将代码注入到调用WSADuplicateSocket()的进程中以复制所需的套接字句柄以供进程访问,然后发送详细信息通过IPC访问您的进程,并通过WSASocket()访问套接字。参见:

C++ Get Handle of Open Sockets of a Program

但是,更强力的方法是使用带有DUPLICATE_CLOSE_SOURCE标志的DuplicateHandle()。无需代码注入: