Thema: Delphi GetExtendedTcpTable

Einzelnen Beitrag anzeigen

Basilikum

Registriert seit: 9. Aug 2003
389 Beiträge
 
Delphi 7 Professional
 
#2

Re: GetExtendedTcpTable

  Alt 13. Nov 2006, 06: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.
  Mit Zitat antworten Zitat