Thema: Delphi GetExtendedTcpTable

Einzelnen Beitrag anzeigen

Benutzerbild von ste_ett
ste_ett

Registriert seit: 10. Sep 2004
Ort: Dülmen
464 Beiträge
 
Delphi 7 Professional
 
#9

Re: GetExtendedTcpTable

  Alt 13. Nov 2006, 09:53
Zitat von chaosben:
Zitat von Basilikum:
AF_INET müsste 2 sein, nicht 0 (WinSock)
Na bitte, da haben wir den Schuldigen. Danke.

Und damit müsste auch das Problem des Thread-Autors gelöst sein.
Nicht ganz.

Delphi-Quellcode:
  MIB_TCPTABLE_OWNER_PID = packed record
    dwNumEntries: DWord;
    table: array [0..ANY_SIZE - 1] of MIB_TCPROW_OWNER_PID ;
  end;
"table" ist als Array deklariert, damit man alle Verbindungen ansprechen kann, allerdings stimmt die Größe nicht immer, sondern nur in dem Fall, dass es exakt eine TCP-Verbindung gibt.

Um den Zugriff dynamisch zu gestalten wird der Array an der Stelle dynamsich erzeugt, d.h. es können (theoretisch) 0 bis N Element vorhanden sein.

Unter C ist das Ganze kein Problem, da es dort keine Informationen über Array-Größen gibt und man über "pTcpTable.dwNumEntries" weiss, wie viele Element der Array hat.

Unter Delphi geht es nicht so einfach.
Eine Möglichkeit ist es, sich einen typisierten Pointer ("PMIB_TCPROW_OWNER_PID") lokal anzulegen und durch den Speicher zu wandern, bis man alle Elemente erhalten hat.

Delphi-Quellcode:
var
  pTable: PMIB_TCPROW_OWNER_PID;
  i: DWORD;
begin

  ...

      pTable := @pTcpTable.Table;
      i := 0; // i dient als Index
      while (i <= pTcpTable.dwNumEntries) do
      begin

        ...

        Inc(i);
        Inc(pTable); // typisierte Pointer werden direkt um "sizeof(Type)" Byte weitergesetzt
      end;
Eine andere Möglichkeit wäre es, selbst einen danamischen Array anzulegen mit "pTcpTable.dwNumEntries" Elementen und den erhaltenen Array dort hinein zu kopieren.
Array wieder freigeben! ("Finalize(MeinArray);")
Dann kann der Zugriff wie gewohnt über eine For-Schleife erfolgen.
Stefan
"Geht nicht!" ist keine Fehlerbeschreibung und "Hab ich schon versucht!" keine Antwort!

Hey, it compiles! Ship it!
  Mit Zitat antworten Zitat