我在Python中通过ctypes调用GetExtendedTcpTable。
为此,我宣布以下结构:
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)]
通过第一次调用GetExtendedTcpTable来初始化ANY_SIZE。
我的问题是谁负责解除上面'table'字段占用的内存?这是一个MIB_TCPROW_OWNER_PID结构数组。
或许我的问题应该是:谁在数组中分配了MIB_TCPROW_OWNER_PID结构? GetExtendedTcpTable还是Python?
提前致谢!
答案 0 :(得分:1)
在调用table
之前,您必须在GetExtendedTcpTable
中分配足够的空间。然后,当该调用返回时,您需要释放它,尽管ctypes
会为您执行此操作。
如果您通过ANY_SIZE
调用GetExtendedTcpTable
作为pTcpTable
获得了NULL
,那么您没有什么特别的事可做。您创建了MIB_TCPTABLE_OWNER_PID
的实例,并为您创建了足够的缓冲区。