取得网卡序列号

类别:VB语言 点击:0 评论:0 推荐:
  很多软件以取得网卡地址作为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

本文地址:http://com.8s8s.com/it/it6878.htm