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.