Windowsでのプロセスネットワークリンクの取得状況(開いているリスニングポート番号を含む)


Windowsでは一般的にIP HelperシリーズAPIインタフェースでネットワーク状態を取得しているが,リンク状況を取得するインタフェースはGetExtendedTcpTableである
DWORD GetExtendedTcpTable(
  __out    PVOID pTcpTable,
  __inout  PDWORD pdwSize,
  __in     BOOL bOrder,
  __in     ULONG ulAf,
  __in     TCP_TABLE_CLASS TableClass,
  __in     ULONG Reserved
);

MSDNのアドレスは次のとおりです.http://msdn.microsoft.com/en-us/library/windows/desktop/aa365928(v=vs.85).aspx
空のBuffer(*pdwSize=0)を先に渡し、ERROR_を返します.INSUFFICIENT_BUFFER、*pdwSizeに必要なBufferサイズが入っています.
ulAf:IPアドレスv 4かv 6かAF_INET、AF_INET6
TableClass,AF_についてINET:
TableClass value
pTcpTable structure
TCP_TABLE_BASIC_ALL
MIB_TCPTABLE
TCP_TABLE_BASIC_CONNECTIONS
MIB_TCPTABLE
TCP_TABLE_BASIC_LISTENER
MIB_TCPTABLE
TCP_TABLE_OWNER_MODULE_ALL
MIB_TCPTABLE_OWNER_MODULE
TCP_TABLE_OWNER_MODULE_CONNECTIONS
MIB_TCPTABLE_OWNER_MODULE
TCP_TABLE_OWNER_MODULE_LISTENER
MIB_TCPTABLE_OWNER_MODULE
TCP_TABLE_OWNER_PID_ALL
MIB_TCPTABLE_OWNER_PID
TCP_TABLE_OWNER_PID_CONNECTIONS
MIB_TCPTABLE_OWNER_PID
TCP_TABLE_OWNER_PID_LISTENER
MIB_TCPTABLE_OWNER_PID
AF_についてINET6:
TableClass value
pTcpTable structure
TCP_TABLE_BASIC_ALL
MIB_TCP6TABLE
TCP_TABLE_BASIC_CONNECTIONS
MIB_TCP6TABLE
TCP_TABLE_BASIC_LISTENER
MIB_TCP6TABLE
TCP_TABLE_OWNER_MODULE_ALL
MIB_TCP6TABLE_OWNER_MODULE
TCP_TABLE_OWNER_MODULE_CONNECTIONS
MIB_TCP6TABLE_OWNER_MODULE
TCP_TABLE_OWNER_MODULE_LISTENER
MIB_TCP6TABLE_OWNER_MODULE
TCP_TABLE_OWNER_PID_ALL
MIB_TCP6TABLE_OWNER_PID
TCP_TABLE_OWNER_PID_CONNECTIONS
MIB_TCP6TABLE_OWNER_PID
TCP_TABLE_OWNER_PID_LISTENER
MIB_TCP6TABLE_OWNER_PID
MIB_TCPTABLE_OWNER_PID
typedef struct {
  DWORD                dwNumEntries;
  MIB_TCPROW_OWNER_PID table[ANY_SIZE];
} MIB_TCPTABLE_OWNER_PID, *PMIB_TCPTABLE_OWNER_PID;

MIB_TCPROW_OWNER_PID
 
typedef struct _MIB_TCPROW_OWNER_PID {
  DWORD dwState;
  DWORD dwLocalAddr;
  DWORD dwLocalPort;
  DWORD dwRemoteAddr;
  DWORD dwRemotePort;
  DWORD dwOwningPid;
} MIB_TCPROW_OWNER_PID, *PMIB_TCPROW_OWNER_PID;