在Python中通过ctypes调用GetExtendedTcpTable时,谁负责释放MIB_TCPROW_OWNER_PID结构?

时间:2011-07-21 20:46:00

标签: python memory ctypes

我在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?

提前致谢!

1 个答案:

答案 0 :(得分:1)

在调用table之前,您必须在GetExtendedTcpTable中分配足够的空间。然后,当该调用返回时,您需要释放它,尽管ctypes会为您执行此操作。

如果您通过ANY_SIZE调用GetExtendedTcpTable作为pTcpTable获得了NULL,那么您没有什么特别的事可做。您创建了MIB_TCPTABLE_OWNER_PID的实例,并为您创建了足够的缓冲区。