Кто заботится об освобождении структуры MIB_TCPROW_OWNER_PID при вызове GetExtendedTcpTable через ctypes в Python? - PullRequest
2 голосов
/ 22 июля 2011

Я звоню GetExtendedTcpTable через ctypes в Python.

Для этого я объявляю следующие структуры:

    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.

Мой вопрос: кто позаботится об освобождении памяти, занятой полем 'table' выше? Который является массивом структур MIB_TCPROW_OWNER_PID.

Или, может быть, мой вопрос должен быть таким: кто выделяет структуры MIB_TCPROW_OWNER_PID в массиве? GetExtendedTcpTable или Python?

Заранее спасибо!

1 Ответ

1 голос
/ 22 июля 2011

Вы должны выделить достаточно места в table перед вызовом GetExtendedTcpTable.И затем, когда этот вызов вернется, вам нужно освободить его, хотя ctypes сделает это за вас.

Если вы получили ANY_SIZE, позвонив GetExtendedTcpTable с pTcpTable как NULL, тогда выне нужно делать ничего особенного.Вы создаете экземпляр MIB_TCPTABLE_OWNER_PID, и для вас создается достаточный буфер.

...