打印本文 打印本文  关闭窗口 关闭窗口  
VB辅导:取得网卡序列号
作者:佚名  文章来源:不详  点击数  更新时间:2008/4/18 14:45:18  文章录入:杜斌  责任编辑:杜斌

  很多软件以取得网卡地址作为license验证,这不失为一个验证合法用户的好办法,不过要付出回复用户电话、传真的代价哦 

  将下面这段代码拷贝到程序中,然后在你的程序需要的时候调用ethernetaddress(0),该函数返回的字符串就是您机器上网卡的以太序列号。 
  private const ncbastat = &h33 

  private const ncbnamsz = 16 

  private const heap_zero_memory = &h8 

  private const heap_generate_exceptions = &h4 

  private const ncbreset = &h32 

  private type ncb 

   ncb_command as byte 

   ncb_retcode as byte 

   ncb_lsn as byte 

   ncb_num as byte 

   ncb_buffer as long 

   ncb_length as integer 

   ncb_callname as string * ncbnamsz 

   ncb_name as string * ncbnamsz 

   ncb_rto as byte 

   ncb_sto as byte 

   ncb_post as long 

   ncb_lana_num as byte 

   ncb_cmd_cplt as byte 

   ncb_reserve(9) as byte ’’ reserved, must be 0 

   ncb_event as long 

  end type 



  private type adapter_status 

   adapter_address(5) as byte 

   rev_major as byte 

   reserved0 as byte 

   adapter_type as byte 

   rev_minor as byte 

   duration as integer 

   frmr_recv as integer 

   frmr_xmit as integer 

   iframe_recv_err as integer 

   xmit_aborts as integer 

   xmit_success as long 

   recv_success as long 

   iframe_xmit_err as integer 

   recv_buff_unavail as integer 

   t1_timeouts as integer 

   ti_timeouts as integer 

   reserved1 as long 

   free_ncbs as integer 

   max_cfg_ncbs as integer 

   max_ncbs as integer 

   xmit_buf_unavail as integer 

   max_dgram_size as integer 

   pending_sess as integer 

   max_cfg_sess as integer 

   max_sess as integer 

   max_sess_pkt_size as integer 

   name_count as integer 

  end type 

  private type name_buffer 

   name as string * ncbnamsz
 
   name_num as integer
 
   name_flags as integer 

  end type 

  private type astat 

   adapt as adapter_status 

   namebuff(30) as name_buffer 

  end type 



  private declare function netbios lib "netapi32.dll" _

  (pncb as ncb) as byte 

  private declare sub copymemory lib "kernel32" alias _

  "rtlmovememory" (hpvdest as any, byval hpvsource as long, _

  byval cbcopy as long) 

  private declare function getprocessheap lib "kernel32" () _

  as long 

  private declare function heapalloc lib "kernel32" _

  (byval hheap as long, byval dwflags as long, _

  byval dwbytes as long) as long 

  private declare function heapfree lib "kernel32" _

  (byval hheap as long, byval dwflags as long, lpmem as any) _

  as long 

  private function ethernetaddress(lananumber as long) _

  as string 

   dim udtncb    as ncb 

   dim bytresponse as byte 

   dim udtastat   as astat 

   dim udttempastat as astat 

   dim lngastat   as long 

   dim strout    as string 

   dim x      as integer 

   udtncb.ncb_command = ncbreset 

   bytresponse = netbios(udtncb) 

   udtncb.ncb_command = ncbastat 

   udtncb.ncb_lana_num = lananumber
 
   udtncb.ncb_callname = "* " 

   udtncb.ncb_length = len(udtastat) 

   lngastat = heapalloc(getprocessheap(), _

  heap_generate_exceptions or heap_zero_memory, udtncb.ncb_length) 

   strout = "" 

   if lngastat then 

    udtncb.ncb_buffer = lngastat 

    bytresponse = netbios(udtncb) 

    copymemory udtastat, udtncb.ncb_buffer, len(udtastat) 

     with udtastat.adapt 

     for x = 0 to 5 

      strout = strout & right$("00" & hex$(.adapter_address(x)), 2) 

     next x 

    end with 

    heapfree getprocessheap(), 0, lngastat 

   end if 

   ethernetaddress = strout 

  end function
打印本文 打印本文  关闭窗口 关闭窗口