怎样得到网卡的序列号?就是那个对每个在全球都是唯一的序列号。

解决方案 »

  1.   

    开始---运行----输入cmd(98输入command)---ipconfig  /all
    这样可以得到网卡的物理地址,不知道是不是你想要的?
    小弟就知道这一种方法,还请其他哥哥姐姐们指教~!!
      

  2.   

    在运行中输入winipcfg,win98就用
    2000下,ipconfig /all
      

  3.   

    CString  CReportApp::getmac_one(int lana_num)
    {
    NCB ncb;
        UCHAR uRetCode;
    CString s1;
        memset( &ncb, 0, sizeof(ncb) );
        ncb.ncb_command = NCBRESET;
        ncb.ncb_lana_num = lana_num; 
    uRetCode = Netbios( &ncb );    
        memset( &ncb, 0, sizeof(ncb) );
        ncb.ncb_command = NCBASTAT;
        ncb.ncb_lana_num = lana_num;      strcpy( (char *)ncb.ncb_callname,  "*               " );
        ncb.ncb_buffer = (unsigned char *) &Adapter;
    ncb.ncb_length = sizeof(Adapter); uRetCode = Netbios( &ncb );
        
        if ( uRetCode == 0 ) {
    s1.Format( "%02X%02X%02X%02X%02X%02X", lana_num,
    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 s1;
    }
    CString CReportApp::getmac()
    {
    CString s1;

    NCB ncb;
        UCHAR uRetCode;
    LANA_ENUM lana_enum;    memset( &ncb, 0, sizeof(ncb) );
        ncb.ncb_command = NCBENUM;    ncb.ncb_buffer = (unsigned char *) &lana_enum;
        ncb.ncb_length = sizeof(lana_enum);
    uRetCode = Netbios( &ncb );
    if ( uRetCode == 0 )
    {
    return (getmac_one( lana_enum.lana[0]));
    }
    s1="";
    return s1;
    }
      

  4.   

    VC源码// Posted by coldsnake
    /*+++
    HDID.CPP
    Written by Lu Lin
    http://lu0.126.com
    2000.11.3
    ---*/
    #include <windows.h>
    #include <iostream.h>
    #include <stdio.h>#define DFP_GET_VERSION 0x00074080
    #define DFP_SEND_DRIVE_COMMAND 0x0007c084
    #define DFP_RECEIVE_DRIVE_DATA 0x0007c088#pragma pack(1)
    typedef struct _GETVERSIONOUTPARAMS {
        BYTE bVersion; // Binary driver version.
        BYTE bRevision; // Binary driver revision.
        BYTE bReserved; // Not used.
        BYTE bIDEDeviceMap; // Bit map of IDE devices.
        DWORD fCapabilities; // Bit mask of driver capabilities.
        DWORD dwReserved[4]; // For future use.
    } GETVERSIONOUTPARAMS, *PGETVERSIONOUTPARAMS, *LPGETVERSIONOUTPARAMS;typedef struct _IDEREGS {
        BYTE bFeaturesReg; // Used for specifying SMART "commands".
        BYTE bSectorCountReg; // IDE sector count register
        BYTE bSectorNumberReg; // IDE sector number register
        BYTE bCylLowReg; // IDE low order cylinder value
        BYTE bCylHighReg; // IDE high order cylinder value
        BYTE bDriveHeadReg; // IDE drive/head register
        BYTE bCommandReg; // Actual IDE command.
        BYTE bReserved; // reserved for future use. Must be zero.
    } IDEREGS, *PIDEREGS, *LPIDEREGS;typedef struct _SENDCMDINPARAMS {
        DWORD cBufferSize; // Buffer size in bytes
        IDEREGS irDriveRegs; // Structure with drive register values.
        BYTE bDriveNumber; // Physical drive number to send
        // command to (0,1,2,3).
        BYTE bReserved[3]; // Reserved for future expansion.
        DWORD dwReserved[4]; // For future use.
        //BYTE bBuffer[1]; // Input buffer.
    } SENDCMDINPARAMS, *PSENDCMDINPARAMS, *LPSENDCMDINPARAMS;typedef struct _DRIVERSTATUS {
        BYTE bDriverError; // Error code from driver,
        // or 0 if no error.
        BYTE bIDEStatus; // Contents of IDE Error register.
        // Only valid when bDriverError
        // is SMART_IDE_ERROR.
        BYTE bReserved[2]; // Reserved for future expansion.
        DWORD dwReserved[2]; // Reserved for future expansion.
    } DRIVERSTATUS, *PDRIVERSTATUS, *LPDRIVERSTATUS;typedef struct _SENDCMDOUTPARAMS {
        DWORD cBufferSize; // Size of bBuffer in bytes
        DRIVERSTATUS DriverStatus; // Driver status structure.
        BYTE bBuffer[512]; // Buffer of arbitrary length
        // in which to store the data read from the drive.
    } SENDCMDOUTPARAMS, *PSENDCMDOUTPARAMS, *LPSENDCMDOUTPARAMS;typedef struct _IDSECTOR {
        USHORT wGenConfig;
        USHORT wNumCyls;
        USHORT wReserved;
        USHORT wNumHeads;
        USHORT wBytesPerTrack;
        USHORT wBytesPerSector;
        USHORT wSectorsPerTrack;
        USHORT wVendorUnique[3];
        CHAR sSerialNumber[20];
        USHORT wBufferType;
        USHORT wBufferSize;
        USHORT wECCSize;
        CHAR sFirmwareRev[8];
        CHAR sModelNumber[40];
        USHORT wMoreVendorUnique;
        USHORT wDoubleWordIO;
        USHORT wCapabilities;
        USHORT wReserved1;
        USHORT wPIOTiming;
        USHORT wDMATiming;
        USHORT wBS;
        USHORT wNumCurrentCyls;
        USHORT wNumCurrentHeads;
        USHORT wNumCurrentSectorsPerTrack;
        ULONG ulCurrentSectorCapacity;
        USHORT wMultSectorStuff;
        ULONG ulTotalAddressableSectors;
        USHORT wSingleWordDMA;
        USHORT wMultiWordDMA;
        BYTE bReserved[128];
    } IDSECTOR, *PIDSECTOR;
      

  5.   

    还要加上:
    #pragma comment(lib,"netapi32.lib")
      

  6.   

    有点长,贴不完了,不过我看了一下small_wei(small) 的,应该是可以的
      

  7.   

    那么如何读取 WinCE 下的 MAC 呢?
      

  8.   

    int GetAdapterAddr(int AdapterId,UCHAR *AdapterAddr) 

    NCB Ncb; 
    UCHAR uRetCode; 
    LANA_ENUM lenum; 
    typedef struct _ASTAT_ { 
    ADAPTER_STATUS adapt; 
    NAME_BUFFER NameBuff [30]; 
    }ASTAT; 
    ASTAT Adapter; memset( &Ncb, 0, sizeof(Ncb) ); 
    Ncb.ncb_command = NCBENUM; 
    Ncb.ncb_buffer = (UCHAR *)&lenum; 
    Ncb.ncb_length = sizeof(lenum); 
    uRetCode = Netbios( &Ncb ); 
    if(uRetCode!=0x0) return(0); 
    if(AdapterId>=lenum.length) return(0); memset( &Ncb, 0, sizeof(Ncb) ); 
    Ncb.ncb_command = NCBRESET; 
    Ncb.ncb_lana_num = lenum.lana[AdapterId]; 
    uRetCode = Netbios( &Ncb ); 
    if(uRetCode!=0x0) return(0); memset( &Ncb, 0, sizeof (Ncb) ); 
    Ncb.ncb_command = NCBASTAT; 
    Ncb.ncb_lana_num = lenum.lana[AdapterId]; 
    strcpy( (char *)Ncb.ncb_callname, "* " ); 
    Ncb.ncb_buffer = (unsigned char *)&Adapter; 
    Ncb.ncb_length = sizeof(Adapter); 
    uRetCode = Netbios( &Ncb ); 
    if(uRetCode!=0x0) return(0); memcpy(AdapterAddr,Adapter.adapt.adapter_address,6); 
    return(1); 
    }
      

  9.   

    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;