So, habe den Fehler gefunden:
Delphi-Quellcode:
function GetIPInfos: IPInfo;
var
Error: DWORD;
TCPTable: PMibTcpTable;
UDPTable: PMibUdptable;
NumEntriesTCP: DWORD;
NumEntriesUDP: DWORD;
dwSize: DWORD;
i: Integer;
begin
NumEntriesTCP := 0;
Setlength(result, 0);
// dwSize := 0;
// Error := GetTcpTable(nil, dwSize, False);
// if Error <> ERROR_INSUFFICIENT_BUFFER then
// Exit;
// GetMem(TCPTable, dwSize);
// try
// if GetTCPTable(TcpTable, dwSize, TRUE) = NO_ERROR then
// begin
// if TCPTable <> nil then
// begin
// NumEntriesTCP := TCPTable.dwNumEntries;
// SetLength(result, NumEntriesTCP);
// for i := 0 to NumEntriesTCP - 1 do
// begin
// result[i].Protocol := 'TCP';
// result[i].localIP := TCPTable^.table[i].dwLocalAddr;
// result[i].localPort := TCPTable^.table[i].dwlocalPort;
// result[i].remoteIP := TCPTable^.table[i].dwRemoteAddr;
// if TCPTable^.table[i].dwRemoteAddr = 0 then
// TCPTable^.table[i].dwRemotePort := 0;
// result[i].remotePort := TCPTable^.table[i].dwRemotePort;
// result[i].Status := TCPTable^.table[i].dwState;
// end;
// end;
// end;
// finally
// FreeMem(TCPTable, dwSize);
// end;
dwSize := 0;
Error := GetUdpTable(
nil, dwSize, False);
if Error <> ERROR_INSUFFICIENT_BUFFER
then
exit;
GetMem(UDPTable, dwSize);
try
if GetUdpTable(UDPTable, dwSize, TRUE) = NO_ERROR
then
begin
if UDPTable <>
nil then
begin
NumEntriesUDP := UDPTable.dwNumEntries;
SetLength(result, NumEntriesUDP);
{SetLength(result, NumEntriesTCP+NumEntriesUDP);}
for i := 0
to NumEntriesUDP-1
do {for i := NumEntriesTCP to NumEntriesTCP+ NumEntriesUDP-1 do}
begin
result[i].Protocol := '
UDP';
result[i].localIP := UDPTable^.table[i].dwLocalAddr;
result[i].localPort := UDPTable^.table[i].dwLocalPort;
result[i].remoteIP := 0;
result[i].remotePort := 0;
result[i].Status := 99;
end;
end;
end;
finally
FreeMem(UDPTable, dwSize);
end;
end;
Da geht irgendwo was schief mit dem Array füllen. Lasse ich den oberen Teil raus und fülle das Array nur mit den UDP Werten klappt alles wunderbar. Nehme ich den
TCP Teil hinzu, stimmen sie nicht mehr. Was mache ich also falsch?