Skip to main content
 首页 » 编程设计

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

2025年05月04日10mq0036

我调用 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 实例,并为您创建了足够的缓冲区。