取得网卡序列号

王朝vb·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

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

Dim udtASTAT As ASTAT

Dim udtTempASTAT As ASTAT

Dim lngASTAT As Long

Dim strOut As String

Dim xAs 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

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航