Ich staune !
Die wohl allseits bekannte Funktion zum auslesen der MAC-Adresse über NetBIOS:
Code:
{Lokale MAC-Adresse ermitteln}
function GetAdapterInfo(Lana: Char): String;
var Adapter : TAdapterStatus;
var NCB : TNCB;
begin
FillChar(NCB, SizeOf(NCB), 0);
NCB.ncb_command := Char(NCBRESET);
NCB.ncb_lana_num := AnsiChar(Lana);
if Netbios(@NCB) <> Char(NRC_GOODRET) then
begin
Result := 'not found 1';
Exit;
end;
FillChar(NCB, SizeOf(NCB), 0);
NCB.ncb_command := Char(NCBASTAT);
NCB.ncb_lana_num := AnsiChar(Lana);
NCB.ncb_callname := '*';
FillChar(Adapter, SizeOf(Adapter), 0);
NCB.ncb_buffer := @Adapter;
NCB.ncb_length := SizeOf(Adapter);
if Netbios(@NCB) <> Char(NRC_GOODRET) then
begin
Result := 'not found 2';
Exit;
end;
Result :=
IntToHex(Byte(Adapter.adapter_address[0]), 2) + '-' +
IntToHex(Byte(Adapter.adapter_address[1]), 2) + '-' +
IntToHex(Byte(Adapter.adapter_address[2]), 2) + '-' +
IntToHex(Byte(Adapter.adapter_address[3]), 2) + '-' +
IntToHex(Byte(Adapter.adapter_address[4]), 2) + '-' +
IntToHex(Byte(Adapter.adapter_address[5]), 2);
end;
function GetMACAdress: string;
var AdapterList : TLanaEnum;
var NCB : TNCB;
begin
FillChar(NCB, SizeOf(NCB), 0);
NCB.ncb_command := Char(NCBENUM);
NCB.ncb_buffer := @AdapterList;
NCB.ncb_length := SizeOf(AdapterList);
Netbios(@NCB);
if Byte(AdapterList.length) > 0 then
Result := GetAdapterInfo(Char(AdapterList.lana[0]))
else
Result := 'not found 3';
end;
funktioniert bestens... fast! Ich habe einen esten Kunden mit über 150 Rechnern, alle dieselbe Marke, nur 3 Modelle, alle genau gleich mit NetInstall mit W-XP aufgesetzt. Mein Programm, das von einem Netzlaufwerk gestartet wird, kann genau bei einem Rechner mit obiger Routine der MAC-Adresse nicht ermitteln. Kommt mit Byte(AdapterList.length) = 0 ('not found 3') zurück.
Code:
MacAddressStrings := TStringList.Create();
JclSysInfo.GetMacAddresses('', MacAddressStrings);
Label2.Caption := MacAddressStrings[0];
MacAddressStrings.Free();
Das hingegen funktioniert! Da bekomme ich die korrekte MAC-Adresse zurück.
Aber damit nicht genug. Bei einem zweiten Kunden mit über 1300 Rechner habe ich genau dasselbe Problem. Bei einem einzigen Rechner bekomme ich über NetBIOS keine MAC-Adresse zurück.
Hat jemand eine Idee, woran das liegen könnte?