Announcement

Collapse
No announcement yet.

Netzwerkkarten und die an sie gebundenen Protokolle ermitteln???

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Netzwerkkarten und die an sie gebundenen Protokolle ermitteln???

    Hi,<br><br>
    weiß jemand wie ich Netzwerkkarten und die an sie gebundenen Protokollen unter WinNT/2000/XP auslesen?<br><br>
    z.B.<br> TCP/IP - > Realtek RTL8139/810x Family Fast Ethernet NIC<br>
    IPX/SPX-kompatibles Protokoll -> Realtek RTL8139/810x Family Fast Ethernet NIC<br><br>
    <br>
    Unter Win9x ist das kein Problem: einfach in der Registry unter „HKEY_LOCAL_MACHINE\Enum“ nach Netzwerkkarten suchen (Class = Net) und den Schlüssen „Bindings“ öffen. In dem dann der Pfad zu den dazugehörigen Protokollen steht.
    <br><br>
    Aber unter NT/2000/XP (hab nur unter XP gesucht...) kann ich nichts dergleichen finden.<br>
    Gibt es denn keine genaue Beschreibung der Registry von MS??? Ich kann absolut nicht finden was mir weiterhilfe <br>
    <br><br>
    Bye Martin

  • #2
    Hallo,

    bei neuerer Windows-Versionen sowie in .NET ist <b>WMI</b> (Windows Management Instrumentation) für diese Aufgabe zuständig. WMI ist eine universelle Treiberschicht, die Informationen aus den unterschiedlichsten Bereichen (Hardware, Treiber, BIOS, Anwendungseinstellungen, Ereignisanzeige usw.) bereitstellen kann, indem alle diese Detail-APIs verborgen und durch ein univerelles API ersetzt werden. Ein Anwendungsentwickler muss sich nur noch in ein API (WMI) einarbeiten, um die verschiedenen Aufgaben erfüllen zu können. WMI gehört ab Windows 2000 fest zum Betriebssystem und kann für ältere Windows-Versionen kostenfrei nachinstalliert werden.

    WMI unterstützt mit <b>WQL</b> (WMI Query Language) eine Abfragesprache, die stark an SQL angelehnt ist. Somit kann eine SELECT-Abfrage die gewünschten Daten liefern, wobei als "Datenbank-Tabelle" der Name der zuständigen WMI-Klasse verwendet wird.

    Hier im FORUM sind einige Beispiele zu finden (Suche über die Zeichenkette "ISWbemServices"), aber ohne die umfangreiche WMI-Dokumentation aus der Hilfe des <i>Microsoft Platform SDK</i> wird es nicht gehen

    Comment


    • #3
      Thx, für die Antwort.<br>Dann werd ich um WMI wohl doch nicht herumkommen :

      Comment


      • #4
        Hi,<br><br>
        Ich hab mir den ganze WMI sch... mal angeschaut.<br>Das ist ja dann doch etwas komplexer, leider habe ich nicht die Zeit mich Wochenlang damit zu beschäftigen (jedenfalls im Moment nicht).<br>
        Hat vielleicht jemand ein Beispiel wie ich die Protokolle und Netzwerkkarten auslese. Und vor allem, woher bekomme ich Übehrsetzungen für die Haderdateien???
        <br><br>
        Bye Marti

        Comment


        • #5
          Hallo,

          &gt;..woher bekomme ich Übehrsetzungen für die Haderdateien???

          die braucht man nicht, denn von Delphi aus ist der Zugriff auf die COM-Objekte von WMI am bequemsten. Dazu wird die Typbibliothek <b>Microsoft WMI Scripting V 1.x Library</b> einmalig importiert, damit Delphi ein Dutzend Komponenten (inklusive <b>TSWbemLocator</b>) generiert. Alle benötigten Konstanten und Interface-Methoden hat Delphi automatisch "übersetzt" und in Form der Unit <b>WbemScripting_TLB.pas</b> abgelegt. Die TSWbemLocator kommt auf das Formular, den Rest der Aufgabe erledigen die folgenden Zeilen:
          <pre>
          uses ActiveX;

          procedure TForm1.Button1Click(Sender: TObject);
          var
          aSrv : ISWbemServices;
          aObjSet : ISWbemObjectSet;
          vNVS : OleVariant;
          aNVSDummy : IDispatch;
          pEnum : IEnumVARIANT;
          vOut : OleVariant;
          dwRetrieved : LongWord;
          hRes : HResult;
          vValue : OleVariant;
          begin
          aSrv := SWbemLocator1.ConnectServer('','','','','','',0,vN VS);
          aObjSet := aSrv.ExecQuery('SELECT MACAddress,Description FROM Win32_NetworkAdapter',
          'WQL', 0, aNVSDummy);
          pEnum := aObjSet.Get__NewEnum as IEnumVARIANT;
          while (TRUE) do
          begin
          hRes := pEnum.Next(1, vOut, dwRetrieved);
          if hRes <> S_OK then
          Break;
          ListBox1.Items.Add(Format('MAC %s (Beschreibung: %s)',
          [VarToStr(vOut.MACAddress), VarToStr(vOut.Description)]));
          end;
          end;
          </pre>
          Die Beschreibung der "Tabelle" Win32_NetworkAdapter ist in der Hilfedatei des Microsoft Platform SDK auf der Seite "Win32_NetworkAdapter" zu finden

          Comment


          • #6
            Hi,<br><br>
            danke für den Quellcode. Das hat mich schon mal ein ganzes Stück weitergebracht.<br>
            Nur ein Problem gibt es da noch, die Protokolle die ich per WMI bekomme stimmen nicht mit denen der WinXP Netzwerkeigenschaften überein!<br>
            <br>
            In den Netzwerkeigenschaften habe ich:<br><br>
            NWLink-NetBIOS<br>
            NWLINK IPX/SPX/NetBIOS-kompatibles Transportproto...<br>
            Internetprotokoll (TCP/IP)<br>
            <br><br>
            Und von WMI bekomme ich 2x TCP/IP (davon 1x TCP & 1x UDP), und IPX aber kein NetBIOS.<br><br>
            Nun weiß ich das NetBIOS kein selbstständiges Protokoll ist, aber ich wollte alles das bekommen was XP auch anzeigt...
            <br><br>
            Mein Quellcode (ist sicher nicht der beste, ich habe keine Ahnung von dem ganzen COM scheiß):<br><br>
            <PRE>
            var
            aSrv : ISWbemServices;
            aObjSet : ISWbemObjectSet;
            vNVS : OleVariant;
            aNVSDummy : IDispatch;
            pEnum : IEnumVARIANT;
            vOut : OleVariant;
            dwRetrieved : LongWord;
            hRes : HResult;
            vValue : OleVariant;
            Test: string;

            begin
            aSrv := SWbemLocator.ConnectServer('','','','','','',0,vNV S);

            aObjSet := aSrv.ExecQuery('SELECT Antecedent, Device FROM Win32_ProtocolBinding',
            'WQL', 0, aNVSDummy);

            pEnum := aObjSet.Get__NewEnum as IEnumVARIANT;
            while (TRUE) do
            begin
            hRes := pEnum.Next(1, vOut, dwRetrieved);
            if hRes <> S_OK then
            Break;
            ListBox.Items.Add(
            aSrv.Get(vOut.Device, 0, nil).Get_Properties_.Item('Description', 0).Get_Value);
            ListBox.Items.Add(
            aSrv.Get(vOut.Antecedent, 0, nil).Get_Properties_.Item('Description', 0).Get_Value);
            end;</PRE>
            <br><br>
            Bye Marti

            Comment

            Working...
            X