typedef struct _ASTAT_
{
    ADAPTER_STATUS adapt;
    NAME_BUFFER    NameBuff [30];
}ASTAT, * PASTAT;///////获得本机MAC地址
ASTAT Adapter;
NCB ncb;
UCHAR uRetCode;    
memset( &ncb, 0, sizeof(ncb) );
ncb.ncb_command = NCBRESET;
ncb.ncb_lana_num = 0;

uRetCode = Netbios( &ncb );
// printf( "The NCBRESET return code is: 0x%x \n", uRetCode );

memset( &ncb, 0, sizeof(ncb) );
ncb.ncb_command = NCBASTAT;
ncb.ncb_lana_num = 0;

strcpy( (char*)ncb.ncb_callname,  "*               " );
ncb.ncb_buffer = (unsigned char *) &Adapter;
ncb.ncb_length = sizeof(Adapter);

uRetCode = Netbios( &ncb );
strLocalMAC.Format("%02X%02X%02X%02X%02X%02X",
Adapter.adapt.adapter_address[0],
Adapter.adapt.adapter_address[1],
Adapter.adapt.adapter_address[2],
Adapter.adapt.adapter_address[3],
Adapter.adapt.adapter_address[4],
Adapter.adapt.adapter_address[5]);                
///////获得本机MAC地址

解决方案 »

  1.   

    To whbxm: 程序中strcpy( (char*)ncb.ncb_callname,  "*              " );做何解释?
    也可写成:memset(ncb.ncb_callname, '*', sizeof(ncb.ncb_callname));但为什么是'*'才有效??找相关的资料也找不到~~~
      

  2.   

    to snake1122:找斑竹也没用呀,发了两封信,如沉大海。
    to zx_sanjin:为什么是*才有效我也不明白呀。看到的例子都用*,没用其他的
      

  3.   

    转载:
    //得到主机名和网卡编号.int getMAC(char * mac) 

    NCB ncb; typedef struct _ASTAT_ 

    ADAPTER_STATUS adapt; 
    NAME_BUFFER NameBuff [30]; 
    } ASTAT, * PASTAT; 
    ASTAT Adapter; 
    typedef struct _LANA_ENUM { // le 
    UCHAR length; 
    UCHAR lana[MAX_LANA]; 
    } LANA_ENUM ; 
    LANA_ENUM lana_enum; 
    UCHAR uRetCode; 
    memset( &ncb, 0, sizeof(ncb) ); 
    memset( &lana_enum, 0, sizeof(lana_enum)); ncb.ncb_command = NCBENUM; 
    ncb.ncb_buffer = (unsigned char *) &lana_enum; 
    ncb.ncb_length = sizeof(LANA_ENUM); 
    uRetCode = Netbios( &ncb ); 
    if( uRetCode != NRC_GOODRET ) 
    return uRetCode ; for( int lana=0; lana<lana_enum.length; lana++ ) 

    ncb.ncb_command = NCBRESET; 
    ncb.ncb_lana_num = lana_enum.lana[lana]; 
    uRetCode = Netbios( &ncb ); 
    if( uRetCode == NRC_GOODRET ) 
    break ; 

    if( uRetCode != NRC_GOODRET ) 
    return uRetCode; memset( &ncb, 0, sizeof(ncb) ); 
    ncb.ncb_command = NCBASTAT; 
    ncb.ncb_lana_num = lana_enum.lana[0]; 
    strcpy( (char* )ncb.ncb_callname, "*" ); 
    ncb.ncb_buffer = (unsigned char *) &Adapter; 
    ncb.ncb_length = sizeof(Adapter); 
    uRetCode = Netbios( &ncb ); 
    if( uRetCode != NRC_GOODRET ) 
    return uRetCode ; 
    sprintf(mac,"%02X-%02X-%02X-%02X-%02X-%02X", 
    Adapter.adapt.adapter_address[0], 
    Adapter.adapt.adapter_address[1], 
    Adapter.adapt.adapter_address[2], 
    Adapter.adapt.adapter_address[3], 
    Adapter.adapt.adapter_address[4], 
    Adapter.adapt.adapter_address[5] ); 
    return 0; 
     
    }