好吧,所以我扩展了我公司的flexlm供应商守护程序,以便对客户端应用程序有所了解.
我需要能够在客户端连接之前找出lmgrd正在侦听的端口. API文档似乎相当贫瘠,我相信他们将大部分代码保存在编译形式中,所以我不能只看它们的来源.
是否可以调用Windows API的强大功能来找出特定进程正在使用的端口?如果来自sysinternals的Process Explorer可以做到,我应该能够做对吗?有没有人有这样的示例代码?
它需要支持Windows XP及更高版本,因为我们的许多客户尚未升级.
编辑:
我应该注意到,事实证明FLEX支持从许可证文件中提取端口.我没有在我面前的代码,但知道这不是找出供应商守护程序/ lmgrd正在运行的端口的最佳方法.
GetTcpTable2 – 请参阅编辑
http://msdn.microsoft.com/en-us/library/bb408406(v=vs.85).aspx
GetTcpTable函数检索IPv4 TCP连接表.
这将填充MIB_TCPTABLE结构.
typedef struct _MIB_TCPTABLE { DWORD dwNumEntries; MIB_TCPROW table[ANY_SIZE]; } MIB_TCPTABLE,*PMIB_TCPTABLE;
现在是MIB_TCPROW
typedef struct _MIB_TCPROW { DWORD dwState; DWORD dwLocalAddr; DWORD dwLocalPort; DWORD dwRemoteAddr; DWORD dwRemotePort; } MIB_TCPROW,*PMIB_TCPROW;
编辑重要说明:
您需要使用GetTcpTable2以获得相关的PID关联.
typedef struct _MIB_TCPROW2 { DWORD dwState; DWORD dwLocalAddr; DWORD dwLocalPort; DWORD dwRemoteAddr; DWORD dwRemotePort; DWORD dwOwningPid; TCP_CONNECTION_OFFLOAD_STATE dwOffloadState; } MIB_TCPROW2,*PMIB_TCPROW2;
dwOwningPid