Registriert seit: 9. Aug 2003
389 Beiträge
Delphi 7 Professional
|
Re: GetExtendedTcpTable
13. Nov 2006, 07:15
siehe Kommentare
Delphi-Quellcode:
type
// hier fehlt das ^ vor dem MIB_TCPROW_OWNER_PID
PMIB_TCPROW_OWNER_PID = ^MIB_TCPROW_OWNER_PID;
PMIB_TCPTABLE_OWNER_PID = ^MIB_TCPTABLE_OWNER_PID;
Const
AF_INET = 2; // 2, nicht 0, wäre in WinSock definiert
var
pTcpTable: PMIB_TCPTABLE_OWNER_PID;
dwSize: DWord; // DWORD reicht, kein Pointer, sonst müsste man ja noch selber Platz dafür allozieren
Res: Dword;
I: Integer;
begin
pTcpTable:=Nil;
Try
// hier ist ein @ zuviel, pTcpTable ist ja schon Pointer... dafür fehlt eines vor dwSize...
// weiter erwartet das API, dass du bereits Speicher alloziert hast, bzw. üblicherweise macht man das so:
dwSize:=0;
Res := GetExtendedTcpTable(pTcpTable, @dwSize, False, AF_INET, TCP_TABLE_OWNER_PID_ALL, 0);
If (Res = ERROR_INSUFFICIENT_BUFFER) Then Begin
GetMem(pTCPTable,dwSize); // das API hat die "gewünschte" Grösse gesetzt
Res := GetExtendedTcpTable(pTcpTable, @dwSize, False, AF_INET, TCP_TABLE_OWNER_PID_ALL, 0);
end;
If not (Res = NO_ERROR) Then raiseLastOSError(); // Error-Handling
// dies ruft nach Access Violation 0..n sind n+1 Elemente, hat aber nur n => 1..n oder 0..n-1
for I := 1 to pTcpTable.dwNumEntries do
writeln( IntToStr(pTcpTable.table[I - 1].dwOwningPid) );
Finally
If (pTcpTable <> Nil) Then FreeMem(pTcpTable);
end;
end.
|
|
Zitat
|