繁体中文
设为首页
加入收藏
当前位置:程序开发首页 >> Visual Basic >> 取得网卡序列号

取得网卡序列号

2005-01-09 20:42:24  作者:wxj_lake  来源:互联网  浏览次数:25  文字大小:【】【】【
简介:   很多软件以取得网卡地址作为License验证,这不失为一个验证合法用户的好办法,不过要付出回复用户电话、传真的代价哦 ^_^   将下面这段代码拷贝到程序中,然后在你的程序需要的时候调用Ether...
关键字:序列号 网卡

  很多软件以取得网卡地址作为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

责任编辑:admin
相关文章