我调用 GetExtendedTcpTable通过 Python 中的 ctypes。
为此,我声明了以下结构:
class MIB_TCPROW_OWNER_PID(ctypes.Structure):
_fields_ = [('dwState', DWORD),
('dwLocalAddr', DWORD),
('dwLocalPort', DWORD),
('dwRemoteAddr', DWORD),
('dwRemotePort', DWORD),
('dwOwningPid', DWORD)]
和:
class MIB_TCPTABLE_OWNER_PID(ctypes.Structure):
_fields_ = [('dwNumEntries', DWORD),
('table', MIB_TCPROW_OWNER_PID * ANY_SIZE)]
其中 ANY_SIZE 通过第一次调用 GetExtendedTcpTable 进行初始化。
我的问题是谁负责释放上面“表”字段占用的内存?这是一个 MIB_TCPROW_OWNER_PID 结构数组。
或者我的问题应该是:数组中的 MIB_TCPROW_OWNER_PID 结构是谁分配的? GetExtendedTcpTable 还是 Python?
提前致谢!
请您参考如下方法:
在调用 GetExtendedTcpTable 之前,您必须在 table 中分配足够的空间。然后当该调用返回时,您需要释放它,尽管 ctypes 会为您完成。
如果您通过调用 GetExtendedTcpTable 并将 pTcpTable 设置为 NULL 获得了 ANY_SIZE,那么您没有什么特别要做的.您创建了一个 MIB_TCPTABLE_OWNER_PID 实例,并为您创建了足够的缓冲区。
