2011-07-21 16 views
2

私はPythonでctypes経由でGetExtendedTcpTableを呼び出しています。 Pythonでctypes経由でGetExtendedTcpTableを呼び出すとき、誰がMIB_TCPROW_OWNER_PID構造体を解放しますか?

はこのために私は以下の構造を宣言しています:

class MIB_TCPROW_OWNER_PID(ctypes.Structure): 
    _fields_ = [('dwState', DWORD), 
       ('dwLocalAddr', DWORD), 
       ('dwLocalPort', DWORD), 
       ('dwRemoteAddr', DWORD), 
       ('dwRemotePort', DWORD), 
       ('dwOwningPid', DWORD)] 

とを:ANY_SIZEがGetExtendedTcpTableへの最初の呼び出しによって初期化され

class MIB_TCPTABLE_OWNER_PID(ctypes.Structure): 
    _fields_ = [('dwNumEntries', DWORD), 
       ('table', MIB_TCPROW_OWNER_PID * ANY_SIZE)] 

私の質問は、上記の「テーブル」フィールドで撮影したメモリーを割り当て解除の世話を誰ですか? MIB_TCPROW_OWNER_PID構造体の配列です。

私の質問は次のようにする必要があります:whoはMIB_TCPROW_OWNER_PID構造体を配列に割り当てますか? GetExtendedTcpTableまたはPython?

ありがとうございます!

答えて

1

あなたはGetExtendedTcpTableを呼び出す前tableに十分なスペースを割り当てる必要があります。そして、その呼び出しが返ってくると、それを解除する必要がありますが、​​がそれを行います。

あなたはNULLとしてpTcpTableGetExtendedTcpTableを呼び出すことによってANY_SIZEを取得している場合、あなたは何をする特別な何もありません。 MIB_TCPTABLE_OWNER_PIDのインスタンスを作成すると、十分なバッファが作成されます。

+0

は、だから私はそれの世話をするスペースやctypesのを割り当てる必要がありますか? –

+0

'MIB_TCPROW_OWNER_PID * ANY_SIZE'は、' ANY_SIZE'が設定された後に 'MIB_TCPTABLE_OWNER_PID'が定義されている限り、それを処理します。 –

関連する問題