[delphi] 맥어드레스 가져오기(GetMACAdress2)

반응형

function GetMACAdress2: string;
var
    NCB: PNCB;
    Adapter: PAdapterStatus;
    RetCode: char;
    I: Integer;
    Lenum: PlanaEnum;
    _SystemID: string;
begin
    Result := '';
    _SystemID := '';
    Getmem(NCB ,sizeof(TNCB));
    Fillchar(NCB^ ,Sizeof(TNCB) ,0);

    Getmem(Lenum ,sizeof(TLanaEnum));
    Fillchar(Lenum^ ,Sizeof(TLanaEnum) ,0);

    Getmem(Adapter ,sizeof(TAdapterStatus));
    Fillchar(Adapter^ ,Sizeof(TAdapterStatus) ,0);

    Lenum.Length := chr(0);
    NCB.ncb_command := chr(NCBENUM);
    NCB.ncb_buffer := pointer(Lenum);
    NCB.ncb_length := sizeof(Lenum);

    i := 0;
    //    Repeat
    Fillchar(NCB^ ,Sizeof(TNCB) ,0);
    Ncb.ncb_command := chr(NCBRESET);
    Ncb.ncb_lana_num := lenum.lana[I];

    Fillchar(NCB^ ,Sizeof(TNCB) ,0);
    Ncb.ncb_command := chr(NCBASTAT);
    Ncb.ncb_lana_num := lenum.lana[I];
    // Must be 16
    Ncb.ncb_callname := '* ';

    Ncb.ncb_buffer := pointer(Adapter);

    Ncb.ncb_length := sizeof(TAdapterStatus);
    RetCode := Netbios(Ncb);
    //---- calc _systemId from mac-address[2-5] XOR mac-address[1]...
    if (RetCode = chr(0)) or (RetCode = chr(6)) then
    begin
        _SystemId := inttohex(ord(Adapter.adapter_address[0]) ,2) + '-' +
            inttohex(ord(Adapter.adapter_address[1]) ,2) + '-' +
            inttohex(ord(Adapter.adapter_address[2]) ,2) + '-' +
            inttohex(ord(Adapter.adapter_address[3]) ,2) + '-' +
            inttohex(ord(Adapter.adapter_address[4]) ,2) + '-' +
            inttohex(ord(Adapter.adapter_address[5]) ,2);
    end;
    FreeMem(NCB);
    FreeMem(Adapter);
    FreeMem(Lenum);
    GetMacAdress2 := _SystemID;
end;

<

 

반응형

이 글을 공유하기

댓글