AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

GetIfTable2 - MIB_IF_ROW2

Ein Thema von andreas.mund · begonnen am 17. Jan 2012 · letzter Beitrag vom 27. Jan 2012
Antwort Antwort
andreas.mund

Registriert seit: 4. Okt 2010
2 Beiträge
 
Delphi 2006 Enterprise
 
#1

GetIfTable2 - MIB_IF_ROW2

  Alt 17. Jan 2012, 15:22
Hallo, ich möchte die API GetIfTable2 in Delphi verwenden. Hat hier evtl. bereits jemand die Struktur MIB_IF_ROW2 auf Delphi umgesetzt?
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: GetIfTable2 - MIB_IF_ROW2

  Alt 17. Jan 2012, 18:18
Etwa sowas hier?
Delphi-Quellcode:
NDIS_MEDIUM = (
NdisMedium802_3,
NdisMedium802_5,
NdisMediumFddi,
NdisMediumWan,
NdisMediumLocalTalk,
NdisMediumDix, // defined for convenience, not a real medium
NdisMediumArcnetRaw,
NdisMediumArcnet878_2,
NdisMediumAtm,
NdisMediumWirelessWan,
NdisMediumIrda,
NdisMediumBpc,
NdisMediumCoWan,
NdisMedium1394,
NdisMediumInfiniBand,
NdisMediumMax // Not a real medium, defined as an upper-bound
);

NDIS_PHYSICAL_MEDIUM = (
NdisPhysicalMediumUnspecified,
NdisPhysicalMediumWirelessLan,
NdisPhysicalMediumCableModem,
NdisPhysicalMediumPhoneLine,
NdisPhysicalMediumPowerLine,
NdisPhysicalMediumDSL, // includes ADSL and UADSL (G.Lite)
NdisPhysicalMediumFibreChannel,
NdisPhysicalMedium1394,
NdisPhysicalMediumWirelessWan,
NdisPhysicalMediumNative802_11,
NdisPhysicalMediumBluetooth,
NdisPhysicalMediumInfiniband,
NdisPhysicalMediumWiMax,
NdisPhysicalMediumUWB,
NdisPhysicalMedium802_3,
NdisPhysicalMedium802_5,
NdisPhysicalMediumIrda,
NdisPhysicalMediumWiredWAN,
NdisPhysicalMediumWiredCoWan,
NdisPhysicalMediumOther,
NdisPhysicalMediumMax // Not a real physical type, defined as an upper-bound
);

NET_IF_ACCESS_TYPE =
( NET_IF_ACCESS_LOOPBACK = 1,
NET_IF_ACCESS_BROADCAST = 2,
NET_IF_ACCESS_POINT_TO_POINT = 3,
NET_IF_ACCESS_POINT_TO_MULTI_POINT = 4,
NET_IF_ACCESS_MAXIMUM = 5);

TUNNEL_TYPE = (
TUNNEL_TYPE_NONE = 0,
TUNNEL_TYPE_OTHER = 1,
TUNNEL_TYPE_DIRECT = 2,
TUNNEL_TYPE_6TO4 = 11,
TUNNEL_TYPE_ISATAP = 13,
TUNNEL_TYPE_TEREDO = 14);

NET_IF_DIRECTION_TYPE = (

NET_IF_DIRECTION_SENDRECEIVE,
NET_IF_DIRECTION_SENDONLY,
NET_IF_DIRECTION_RECEIVEONLY,
NET_IF_DIRECTION_MAXIMUM
);

TInterfaceAndOperStatusFlags = (
HardwareInterface = 1,
FilterInterface = 1,
ConnectorPresent = 1,
NotAuthenticated = 1,
NotMediaConnected = 1,
Paused = 1,
LowPower = 1,
EndPointInterface = 1);

NET_IF_ADMIN_STATUS = ( // ifAdminStatus

NET_IF_ADMIN_STATUS_UP = 1,
NET_IF_ADMIN_STATUS_DOWN = 2,
NET_IF_ADMIN_STATUS_TESTING = 3
);

IF_OPER_STATUS = (
IfOperStatusUp,
IfOperStatusDown,
IfOperStatusTesting,
IfOperStatusUnknown,
IfOperStatusDormant,
IfOperStatusNotPresent,
IfOperStatusLowerLayerDown);
{$EXTERNALSYM IF_OPER_STATUS}
TIfOperStatus = IF_OPER_STATUS;

NET_IF_MEDIA_CONNECT_STATE = (
MediaConnectStateUnknown,
MediaConnectStateConnected,
MediaConnectStateDisconnected);

NET_IF_CONNECTION_TYPE = (
NET_IF_CONNECTION_DEDICATED = 1,
NET_IF_CONNECTION_PASSIVE = 2,
NET_IF_CONNECTION_DEMAND = 3,
NET_IF_CONNECTION_MAXIMUM = 4);

TMibIfRow2 = packed record
InterfaceLuid: record
case integer of
0: (
Value: Dword);
1: (
Reserved: Dword;
NetLuidIndex: Dword;
IfType: Dword);
end;
InterfaceIndex:ULONG ;
InterfaceGuid: TGUID;
Alias:array[0..256] of WCHAR;
Description:array[0..256] of WCHAR;
PhysicalAddressLength:ULONG;
PhysicalAddress:array[0..31] of UCHAR;
PermanentPhysicalAddress:array[0..31] of UCHAR;
Mtu:ULONG;
Typet:ULONG;
TunnelType:TUNNEL_TYPE;
MediaType:NDIS_MEDIUM;
PhysicalMediumType:NDIS_PHYSICAL_MEDIUM;
AccessType:NET_IF_ACCESS_TYPE;
DirectionType:NET_IF_DIRECTION_TYPE;
InterfaceAndOperStatusFlags: TInterfaceAndOperStatusFlags ;
OperStatus:IF_OPER_STATUS;
AdminStatus:NET_IF_ADMIN_STATUS;
MediaConnectState:NET_IF_MEDIA_CONNECT_STATE;
NetworkGuid:TGUID;
ConnectionType:NET_IF_CONNECTION_TYPE;
TransmitLinkSpeed:DWORD;
ReceiveLinkSpeed:DWORD;
InOctets:DWORD;
InUcastPkts:DWORD;
InNUcastPkts:DWORD;
InDiscards:DWORD;
InErrors:DWORD;
InUnknownProtos:DWORD;
InUcastOctets:DWORD;
InMulticastOctets:DWORD;
InBroadcastOctets:DWORD;
OutOctets:DWORD;
OutUcastPkts:DWORD;
OutNUcastPkts:DWORD;
OutDiscards:DWORD;
OutErrors:DWORD;
OutUcastOctets:DWORD;
OutMulticastOctets:DWORD;
OutBroadcastOctets:DWORD;
OutQLen:DWORD;

end;
TMibIfArray2 = array [0..512] of TMibIfRow2;
TMibIfTable2 = packed record
dwNumEntries: ULONG ;
Table : TMibIfArray2;
end;
Und damit das kein ehter Guttenberg wird hier noch die Quellenangabe
Gefunden über den 2. Link bei Bei Google suchenDelphi MIB_IF_ROW2
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
andreas.mund

Registriert seit: 4. Okt 2010
2 Beiträge
 
Delphi 2006 Enterprise
 
#3

AW: GetIfTable2 - MIB_IF_ROW2

  Alt 27. Jan 2012, 09:13
Vielen dank für deine Antwort.

Ich habe diese und auch weitere in Russischen Foren gefundenen Versionen von MIB_IF_ROW2 getestet. Leider scheint aber noch irgendetwas falsch zu sein.

Wenn ich den hier beschriebene Record verwende so ist die Ausgabe von "Alias" und "Description" korrekt. Die folgenden Einträge aus MIB_IF_ROW2 sind verschoben. Der Record scheint 110 Bytes zu kurz zu sein. Füge ich am ende der Struktur 110 Bytes an (OFFSET : Array[1..110] of Byte; ) werden alle Einträge von "Alias" und Description korrekt ausgelesen.

Ich habe die ganze Struktur noch einmal mit der MSDN Hilfe verglichen...

hierbei fällt mir vor allen dingen auf das "ULONG64" im Beispiel jeweils mit DWORD übersetzt wurde. Ein DWORD hat jedoch nur 32 Bit und einen 64 Bit unsigned integer 64 Bit gibt es soweit mir bekannt ist in Delphi nicht. Wenn ich anstatt DWORD jeweils INT64 verwenden würde (was zumindest von der Anzahl an Bytes passt) erklärt das aber auch nicht das komplette Offset von 110 Bytes. (Wie kann ULONG 64 korrekt nach Delphi übersetzt werden!?)

Hat jemand eine idee wo der Fehler sein könnte?
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:22 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz