AGB  ·  Datenschutz  ·  Impressum  







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

TCP/IP-Einstellungen per Code ändern

Ein Thema von CCRDude · begonnen am 14. Aug 2012
Antwort Antwort
CCRDude

Registriert seit: 9. Jun 2011
678 Beiträge
 
FreePascal / Lazarus
 
#1

TCP/IP-Einstellungen per Code ändern

  Alt 14. Aug 2012, 09:47
Vorab: die Suchfunktion kenne ich, habe ich hier glaube ich ausführlich verwendet (und die brauchbaren Informationen extrahiert, z.B hier). Auch netzweit habe ich schon gesucht. Natürlich auch die RTL-Sourcen, Jwa, Jcl etc.

Hintergrund: eine Windows PE-CD mit Software, die ggfls. eine Internetverbindung braucht (Windows PE ist das "nackte" Mini-Windows, das u.a. auch beim Starten von der Installations-CD verwendet wird). Dazu möchte ich per eigener Anwendung in der Lage sein, TCP/IP-Einstellungen zu verändern (DHCP oder nicht DHCP, IP-Adresse, Subnetzmaske, DNS-Server).

Häufig wird als Lösung WMI empfohlen. Das hat den Nachteil, dass das PE um WMI ergänzt werden muss. Das Ergänzen geht für PE 3.0 (das zu Win7 gehört) ganz gut, aber ich will auch älteres unterstützen.

Auch das Aufrufen von Kommandozeilen-Tools scheidet aus.

Also möchte ich dies per klassischer WinAPI lösen. Dazu habe ich nach Suche hier im Forum IpHlpApi.GetAdaphersAddresses gefunden, womit ich schonmal Informationen auslesen kann (der Auslesen-Teil ist überall im Netz auch immer recht schnell zu finden). Auch AddIPAddress und DeleteIPAddress habe ich erwähnt gefunden.

Weiter habe ich mich mit GetUnicastIpAddressTable beschäftigt. Sehr umständliches Ding, noch nicht in IpHlpApi oder sonstiges Units wie Jwa vorhanden, mit den structs habe ich mir sehr schwergetan.

Deswegen Frage 1: gibt es in C Unions, deren Variablen die einzelne Bits eines Wertes ansprechen? Siehe NET_LUID.

Code:
struct NET_LUID {
  ULONG64 Value;
  struct {
    ULONG64 Reserved :24;
    ULONG64 NetLuidIndex :24;
    ULONG64 IfType :16;
  } Info;
};
Mein Ansatz:
Delphi-Quellcode:
type
   NET_LUID = record
      Value: UInt64;
      Info: UInt64;
      function NetLuidIndex: Word;
      function IfType: Word;
   end;

function NET_LUID.NetLuidIndex: Word;
begin
   Result := ((Info shr 16) and $FFFFFF);
end;

function NET_LUID.IfType: Word;
begin
   Result := (Info and $FFFF);
end;
Da fehlt mir aber nun das sichere Verständnis der C-Struktur - :24 + :24 + :16 sind ja nun 64 bit - fangen die Bits "oben" oder "unten" an z.B.? Oder verstehe ich das ganz falsch?

Oder gibt es gar irgendwo bereits Delphi-Header für MIB_UNICASTADDRESS_TABLE & MIB_UNICASTADDRESS_ROW plus was da dranhängt, die ich nur nicht gefunden habe?

Frage 2: gibt es einfachere Ansätze? Immerhin muss das schon vor Vista (die *Unicast*-Funktionen gehen erst ab Vista) funktioniert haben

Frage 3: wo ich schonmal dabei bin... sollte jemand das gerade zur Hand haben: welche API beschäftigt sich mit WLAN-Verbindungen? Das käme vermutlich als nächstes.

Geändert von CCRDude (14. Aug 2012 um 11:53 Uhr)
  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 08:18 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