type
TMACAdress = array[0..5] of byte;
ENCBError = class(Exception);
function GetMACAdress(AdapterNum:byte):TMACAdress;
function MACAdressToStr(aMACAdr:TMACAdress):string;
function IsMACAdress(aMACAdr:TMACAdress):boolean;
var
MacAdressFormat:string;
implementation
ResourceString
SNCBError='NetBios-Fehler %d';
type TAStat=packed record
Adapter_Status:TAdapterStatus;
Name_Buffer:array[0..49] of TNameBuffer;
end;
function MACAdressToStr(aMACAdr:TMACAdress):string;
begin
Result:=Format( MacAdressFormat,
[aMACAdr[0],
aMACAdr[1],
aMACAdr[2],
aMACAdr[3],
aMACAdr[4],
aMACAdr[5]]
);
end;
procedure CheckResult(aReturnCode:char);
begin
if Byte(aReturnCode)<>NRC_GOODRET then
raise ENCBError.Create(Format(SNCBError,[byte(aReturnCode)]));
end;
function IsMACAdress(aMACAdr:TMACAdress):boolean;
var i:integer;
begin
for i:=0 to 5 do if aMACAdr[i]<>0 then begin Result:=True; exit end;
Result:=False;
end;
function GetMACAdress(AdapterNum:byte):TMACAdress;
var Adapter:TAStat;
NCB:TNCB;
begin
FillChar(NCB,SizeOf(NCB),0);
NCB.ncb_command:=char(NCBRESET);
NCB.ncb_lana_num:=char(AdapterNum);
CheckResult(NetBIOS(@NCB));