007
18.06.2003, 17:32 Uhr
sabmarren
|
Hi, dafür brauchst Du die Process-ID. Siehe doch mal bei Netstat, da ist zu IP + Port die Process id hinterlegt.
Das macht man dann mit Hilfe undokumentierter functions in der iphlpapi.dll:
DWORD (WINAPI *pAllocateAndGetTcpExTableFromStack)( PMIB_TCPEXTABLE *pTcpTable, // buffer for the connection table BOOL bOrder, // sort the table? HANDLE heap, DWORD zero, DWORD flags );
DWORD (WINAPI *pAllocateAndGetUdpExTableFromStack)( PMIB_UDPEXTABLE *pTcpTable, // buffer for the connection table BOOL bOrder, // sort the table? HANDLE heap, DWORD zero, DWORD flags );
Weiter brauchst du die Structuren: typedef struct _MIB_TCPROW_EX { DWORD dwState; // MIB_TCP_STATE_* DWORD dwLocalAddr; DWORD dwLocalPort; DWORD dwRemoteAddr; DWORD dwRemotePort; DWORD dwProcessId; } MIB_TCPROW_EX, *PMIB_TCPROW_EX;
typedef struct _MIB_UDPROW_EX { DWORD dwLocalAddr; DWORD dwLocalPort; DWORD dwProcessId; } MIB_UDPROW_EX, *PMIB_UDPROW_EX;
typedef struct _MIB_TCPTABLE_EX { DWORD dwNumEntries; MIB_TCPROW_EX table[ANY_SIZE]; } MIB_TCPTABLE_EX, *PMIB_TCPTABLE_EX; typedef struct _MIB_UDPTABLE_EX { DWORD dwNumEntries; MIB_UDPROW_EX table[ANY_SIZE]; } MIB_UDPTABLE_EX, *PMIB_UDPTABLE_EX;
Das ganze wir so geprogt , wie bei der bekannten Function GetTcpTable(...) oder GetUdpTable(...)
Den Processnamen kannst natürlich auch mit Hilfe PID herausbekommen. Via PID kannst dann deine Messages an den Process senden.
Gruss sabmarren |