você deve usar
DWORD GetExtendedTcpTable (PVOID pTcpTable,PDWORD pdwSize, BOOL bOrder, ULONG ulAf, TCP_TABLE_CLASS TableClass,ULONG Reserved );
com
Valor de TableClass = TCP_TABLE_OWNER_PID_ALL "ou" TCP_TABLE_OWNER_PID_CONNECTIONS "ou" TCP_TABLE_OWNER_PID_LISTENER
estrutura pTcpTable - > MIB_TCPTABLE_OWNER_PID
dependendo das informações que você deseja recuperar
EDITAR:
TCP_TABLE_OWNER_PID_ALL retorna a estrutura MIB_TCPTABLE_OWNER_PID que é uma matriz de estruturas MIB_TCPROW_OWNER_PID onde cada dwState
deve ter MIB_TCP_STATE_CLOSED
quando ligado e não escutando, essa estrutura também oferece dwLocalAddr
e dwLocalPort
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;