Einzelnen Beitrag anzeigen

Benutzerbild von x000x
x000x

Registriert seit: 21. Jan 2004
Ort: Bei Hamburg
308 Beiträge
 
Delphi XE2 Professional
 
#4

Re: Type-Deklaration PF_INTERFACE_STATS (MSDN-PlattformSDK:

  Alt 19. Jun 2005, 19:07
Zitat von marabu:
Die Speicherzuordnung sollte zweistufig erfolgen. Beim einem ersten Aufruf wird BufferSize mit SizeOf(PF_INTERFACE_STATS) initialisiert. Das Ergebnis des Aufrufs ist eine korrekte Initialisierung von Buffersize für den zweiten Aufruf.
Ok, dass hatte ich auch so verstanden. Trotzdem danke
Delphi-Quellcode:
procedure FltStats;
Type
   TFilter = Array[0..15] of PF_FILTER_STATS;
   PFilter = ^TFilter;
var bufSize : DWord;
    dwResult : DWord;
    ppfStats : PPF_INTERFACE_STATS;
    i : Integer;
    Filter : PFilter;
begin
   bufSize := SizeOf(PF_INTERFACE_STATS);
   GetMem(ppfStats, bufSize);
   try
      dwResult := PfGetInterfaceStatistics(hIf, ppfStats, @bufSize, false);
      case dwResult of
         ERROR_INSUFFICIENT_BUFFER :
            begin
               FreeMem(ppfStats);
               GetMem(ppfStats, bufSize);
               dwResult := PfGetInterfaceStatistics(hIf, ppfStats, @bufSize, false);
               if dwResult <> NO_ERROR then
                  Exit;
            end;
         ERROR_INVALID_HANDLE : Exit;
      end;
      Filter := @ppfStats^.filterinfo;
      for i:= 0 to Length(Filter^)-1 do
         ShowMessage( 'Filter (' + IntToStr(Succ(i)) + ')'#13#10 +
                      ' SourcePort: ' + IntToStr(Filter[i].info.wSrcPort) + #13#10+
                      ' DestinationPort: ' + IntToStr(Filter[i].info.wDstPort));
   finally
      FreeMem(ppfStats);
   end;
end;
Hier hab ich eigentlich nichts anderes gemacht, als wie im 1. Posting von mir. Die MessageBox
gibt mir jedenfalls für die Filter die auch existieren, die Korrekten Infos. Mein Problem ist
anscheinend genau das:
Zitat von marabu:
Der Zugriff auf die einzelnen Filter erfolgt dann einfach über Zeiger-Arithmetik.
Hat jemand dafür eventuell ein Beispiel? Es reicht eine Zeile, z.B. wie komme ich an die Infos für den 2. Filter?
(Das muss doch auch irgendwie dynamisch gehen, also OHNE das ich vorher ein array mit fester länge definiere?!)
Peter
-= Gruss Peter =-
-= alias x000x =-
  Mit Zitat antworten Zitat