2014-01-20 2 views
0

Я должен применить механизм защиты к программному обеспечению vb6, и мы решили продолжить использование аппаратного адреса сетевой карты (MAC-адрес) для генерации ключи. У меня есть эта часть кода со мной, что делает то же самое. Я считаю, что он работает в Windows XP.vb6-Получение физического адреса сетевого адаптера в Windows 7 и более поздних версиях

Option Explicit 

' 
'--------------------------------------------------------------------------- 
' Used to get the MAC address. 
'--------------------------------------------------------------------------- 
' 
Private Const NCBNAMSZ As Long = 16 
Private Const NCBENUM As Long = &H37 
Private Const NCBRESET As Long = &H32 
Private Const NCBASTAT As Long = &H33 
Private Const HEAP_ZERO_MEMORY As Long = &H8 
Private Const HEAP_GENERATE_EXCEPTIONS As Long = &H4 

Private Type NET_CONTROL_BLOCK '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_(0 To NCBNAMSZ - 1) As Byte 
    name_num     As Byte 
    name_flags    As Byte 
End Type 

Private Type ASTAT 
    adapt    As ADAPTER_STATUS 
    NameBuff(0 To 29) As NAME_BUFFER 
End Type 

Private Declare Function Netbios Lib "netapi32" _ 
     (pncb As NET_CONTROL_BLOCK) 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 Sub Form_Load() 
Dim strMACAddress As String 

    strMACAddress = fGetMacAddress() 

    If strMACAddress <> "" Then 
     Call MsgBox(strMACAddress, vbInformation, "MAC Address") 
    End If 

End Sub 

Private Function fGetMacAddress() As String 
    Dim l As Long 
    Dim lngError As Long 
    Dim lngSize As Long 
    Dim pAdapt As Long 
    Dim pAddrStr As Long 
    Dim pASTAT As Long 
    Dim strTemp As String 
    Dim strAddress As String 
    Dim strMACAddress As String 
    Dim AST As ASTAT 
    Dim NCB As NET_CONTROL_BLOCK 

    ' 
    '--------------------------------------------------------------------------- 
    ' Get the network interface card's MAC address. 
    '---------------------------------------------------------------------------- 
    ' 
    On Error GoTo ErrorHandler 
    fGetMacAddress = "" 
    strMACAddress = "" 

    NCB.ncb_command = NCBRESET 
    Call Netbios(NCB) 

    NCB.ncb_callname = "*    " 
    NCB.ncb_command = NCBASTAT 
    NCB.ncb_lana_num = 0 
    NCB.ncb_length = Len(AST) 

    pASTAT = HeapAlloc(GetProcessHeap(), HEAP_GENERATE_EXCEPTIONS Or _ 
         HEAP_ZERO_MEMORY, NCB.ncb_length) 
    If pASTAT = 0 Then GoTo ErrorHandler 

    NCB.ncb_buffer = pASTAT 
    Call Netbios(NCB) 

    Call CopyMemory(AST, NCB.ncb_buffer, Len(AST)) 

    strMACAddress = Right$("00" & Hex(AST.adapt.adapter_address(0)), 2) & _ 
        Right$("00" & Hex(AST.adapt.adapter_address(1)), 2) & _ 
        Right$("00" & Hex(AST.adapt.adapter_address(2)), 2) & _ 
        Right$("00" & Hex(AST.adapt.adapter_address(3)), 2) & _ 
        Right$("00" & Hex(AST.adapt.adapter_address(4)), 2) & _ 
        Right$("00" & Hex(AST.adapt.adapter_address(5)), 2) 

    Call HeapFree(GetProcessHeap(), 0, pASTAT) 

    fGetMacAddress = strMACAddress 
    GoTo NormalExit 

ErrorHandler: 
    Call MsgBox(Err.Description, vbCritical, "Error") 

NormalExit: 
    End Function 

Ссылка: 118623

Когда я запускаю этот код на Windows 7. Он возвращает только MAC-адрес в качестве 00000000. Я пробовал на 5 ПК, и результат тот же. Пожалуйста, помогите: |

ответ

1

Попробуйте это:

Dim myWMI As Object, myObj As Object, Itm 

Set myWMI = GetObject("winmgmts:\\.\root\cimv2") 
Set myObj = myWMI.ExecQuery("SELECT * FROM " & _ 
       "Win32_NetworkAdapterConfiguration " & _ 
       "WHERE IPEnabled = True") 
For Each Itm In myObj 
    MsgBox (Itm.IPAddress(0)) 
    MsgBox (Itm.MACAddress) 
    Exit For 
Next 

найти с помощью Google: http://www.access-programmers.co.uk/forums/showthread.php?t=216672

+0

Наконец ответ !! В настоящее время я вдали от своего компьютера .. попробуем это как можно скорее. – codegasm

+0

Где вы были сэр ?? Это сработало отлично. Благодаря тонну!! – codegasm

0
Public Function MACid() As String 
Dim computer As String 
Dim wmi As Variant 
Dim query As Variant 
Dim mac As Variant 
Dim mac_ids As String 

    computer = "." 
    Set wmi = GetObject("winmgmts:" & _ 
     "{impersonationLevel=impersonate}!\\" & _ 
     computer & "\root\cimv2") 
    Set query = wmi.ExecQuery("SELECT * FROM Win32_NetworkAdapterConfiguration where IPEnabled = true") 

    For Each mac In query 
     mac_ids = mac_ids & ", " & mac.MacAddress 
    Next mac 
    If Len(mac_ids) > 0 Then mac_ids = Mid$(mac_ids, 3) 

    MACid = mac_ids 
End Function 
Смежные вопросы