WMI 中 root/DEFAULT/StdRegProv 的使用例程

' WMI 中 root/DEFAULT/StdRegProv 的使用例程
'     需引用 MicroSoft WMI Scripting V1.2 Library
'     文件定位: C:/WINDOWS/system32/wbem/wbemdisp.TLB

'Option Explicit

'HDefKey
Public hDefKey As Long
Public Const HKEY_CLASSES_ROOT As Long = &H80000000
Public Const HKEY_CURRENT_USER As Long = &H80000001
Public Const HKEY_LOCAL_MACHINE As Long = &H80000002
Public Const HKEY_USERS As Long = &H80000003
Public Const HKEY_CURRENT_CONFIG As Long = &H80000005
Public Const HKEY_DYN_DATA As Long = &H80000006            'For Windows95 And Windows98 Only

'iTypes
Public Const REG_SZ = 1
Public Const REG_EXPAND_SZ = 2
Public Const REG_BINARY = 3
Public Const REG_DWORD = 4
Public Const REG_MULTI_SZ = 7

'for CheckAccess's uRequired
'要验证的访问权限可选参数。可将这些值加在一起来验证多个访问权限。默认值为 3。
Public uRequired As Long
Public Const KEY_QUERY_VALUE As Long = &H1
Public Const KEY_SET_VALUE As Long = &H2
Public Const KEY_CREATE_SUB_KEY As Long = &H4
Public Const KEY_ENUMERATE_SUB_KEYS As Long = &H8
Public Const KEY_NOTIFY As Long = &H10
Public Const KEY_CREATE_LINK As Long = &H20
Public Const DELETE As Long = &H10000
Public Const READ_CONTROL As Long = &H20000
Public Const WRITE_DAC As Long = &H40000
Public Const WRITE_OWNER As Long = &H80000

Public sSubKeyName As Variant     '子键名称
Public lReturnCode As Long      '返回码

'验证访问权限
Public Sub StdRegProv_CheckAccess()

    'uint32 CheckAccess([in] uint32 hDefKey,[in] string sSubKeyName,[in] uint32 uRequired,[out] boolean bGranted)
   
    strComputer = "."
    Set objReg = GetObject("winmgmts:{impersonationLevel=impersonate}!//" & strComputer & "/root/default:StdRegProv")

    hDefKey = HKEY_LOCAL_MACHINE
    sSubKeyName = "SYSTEM/CurrentControlSet"
    uRequired = KEY_QUERY_VALUE     '验证的内容

    objReg.CheckAccess hDefKey, sSubKeyName, uRequired, bGranted
    If bGranted Then
        '验证访问权限成功
    Else
        '验证访问权限失败
    End If
End Sub

'在指定的根键创建子项
Public Sub StdRegProv_CreateKey()

    'uint32 CreateKey([in] uint32 hDefKey,[in] string sSubKeyName)
   
    strComputer = "."
    Set objReg = GetObject("winmgmts:{impersonationLevel=impersonate}!//" & strComputer & "/root/default:StdRegProv")

    hDefKey = HKEY_LOCAL_MACHINE
    sSubKeyName = "Software/MyKey/MySubKey"
   
    Set lReturnCode = objReg.CreateKey(hDefKey, sSubKeyName)

    If lReturnCode = 0 And Err.Number = 0 Then
        '创建子项成功
    Else
        '创建子项失败
    End If
End Sub

'在指定的根键里删除一个子项。
Public Sub StdRegProv_DeleteKey()

    'uint32 DeleteKey([in] uint32 hDefKey,[in] string sSubKeyName)
   
    strComputer = "."
    Set objReg = GetObject("winmgmts:{impersonationLevel=impersonate}!//" & strComputer & "/root/default:StdRegProv")

    hDefKey = HKEY_LOCAL_MACHINE
    sSubKeyName = "Software/MyKey/MySubKey" '要删除的子项
   
    lReturnCode = objReg.DeleteKey(hDefKey, sSubKeyName)
    If lReturnCode = 0 And Err.Number = 0 Then
        '删除子项成功
    Else
        '删除子项失败
    End If
End Sub

'在指定的子项里删除一个键值
Public Sub StdRegProv_DeleteValue()

    'uint32 DeleteValue([in] uint32 hDefKey,[in] string sSubKeyName,[in] string sValueName);
   
    strComputer = "."
    Set objReg = GetObject("winmgmts:{impersonationLevel=impersonate}!//" & strComputer & "/root/default:StdRegProv")
    KeyPath = "Software/MyKey/MySubKey"

    hDefKey = HKEY_LOCAL_MACHINE
    sSubKeyName = "Software/MyKey/MySubKey" '子项
    strValueName = "Example DWORD Value"    '要删除的键名

    lReturnCode = objRegistry.DeleteValue(hDefKey, sSubKeyName, strValueName)

    lReturnCode = objReg.DeleteKey(hDefKey, sSubKeyName)
    If lReturnCode = 0 And Err.Number = 0 Then
        '删除成功
    Else
        '删除失败
    End If
End Sub

'枚举某路径的子项。
Public Sub StdRegProv_EnumKey()

    'uint32 EnumKey([in] uint32 hDefKey,[in] string sSubKeyName,[out] string sNames)

    strComputer = "."
    Set objReg = GetObject("winmgmts:{impersonationLevel=impersonate}!//" & strComputer & "/root/default:StdRegProv")
   
    hDefKey = HKEY_LOCAL_MACHINE
    sSubKeyName = "SYSTEM/CurrentControlSet/Services"
   
    objReg.EnumKey hDefKey, sSubKeyName, sNames
   
    For Each subkey In sNames
        '
        '
        'Debug.Print subkey
        '
        '
    Next
End Sub

'枚举某子项的键名及键值属性。
Public Sub StdRegProv_EnumValues()

    'uint32 EnumValues([in] uint32 hDefKey,[in] string sSubKeyName,[out] string sNames,[out] sint32 iTypes)
   
    strComputer = "."
    Set objReg = GetObject("winmgmts:{impersonationLevel=impersonate}!//" & strComputer & "/root/default:StdRegProv")
   
    hDefKey = HKEY_LOCAL_MACHINE
    sSubKeyName = "SYSTEM/CurrentControlSet/Control/Lsa"    '枚举的子项
   
    Dim iTypes As Variant

    objReg.EnumValues hDefKey, sSubKeyName, sNames, iTypes
    For i = 0 To UBound(sNames)
        Debug.Print "Value Name: " & sNames(i)
        Select Case iTypes(i)
            Case REG_SZ
                Debug.Print "Data Type: String"
            Case REG_EXPAND_SZ
                Debug.Print "Data Type: Expanded String"
            Case REG_BINARY
                Debug.Print "Data Type: Binary"
            Case REG_DWORD
                Debug.Print "Data Type: DWORD"
            Case REG_MULTI_SZ
                Debug.Print "Data Type: Multi String"
        End Select
    Next
End Sub


'以下方法设置或读取一个指定键名的值:成功,方法返回一个 uint32 是 0;如果出现错误,则返回其他值。
'sValueName 可指定一个空的字符串来设置默认键值的数据。

Public Sub StdRegProv_GetBinaryValue()
    '数据类型为 REG_BINARY
    'uint32 GetBinaryValue([in] uint32 hDefKey,[in] string sSubKeyName,[in] string sValueName,[out] uint8 uValue);
End Sub

Public Sub StdRegProv_SetBinaryValue()
    '数据类型为 REG_BINARY,uValue 可以为二进制数组
    'uint32 SetBinaryValue([in] uint32 hDefKey,[in] string sSubKeyName,[in] string sValueName,[in] uint8 uValue)
   
    Set objReg = GetObject("Winmgmts:root/default:StdRegProv")

    sSubKeyName = "Software/MyKey"
    uValue = Array(1, 2, 3, 4, 5, 6, 7, 8)
    lReturnCode = objRegistry.SetBinaryValue(HKEY_CURRENT_USER, sSubKeyName, "MyBinaryNamedValue", uValue)

    If lReturnCode = 0 And Err.Number = 0 Then
        '修改键值成功
    Else
        '修改键值失败
    End If
End Sub

Public Sub StdRegProv_GetDWORDValue()
    '数据类型为 REG_DWORD
    'uint32 GetDWORDValue([in] uint32 hDefKey,[in] string sSubKeyName,[in] string sValueName,[out] uint32 uValue)
End Sub

Public Sub StdRegProv_SetDWORDValue()
    '数据类型为 REG_DWORD
    'uint32 SetDWORDValue([in] uint32 hDefKey,[in] string sSubKeyName,[in] string sValueName,[in] uint32 uValue)
End Sub

Public Sub StdRegProv_GetExpandedStringValue()
    '数据类型为 REG_EXPAND_SZ
    'uint32 GetExpandedStringValue([in] uint32 hDefKey,[in] string sSubKeyName,[in] string sValueName,[out] string sValue)
End Sub

Public Sub StdRegProv_SetExpandedStringValue()
    '数据类型为 REG_EXPAND_SZ
    'uint32 SetExpandedStringValue([in] uint32 hDefKey,[in] string sSubKeyName,[in] string sValueName,[in] string sValue)
End Sub

Public Sub StdRegProv_GetMultiStringValue()
    '数据类型为 REG_MULTI_SZ
    'uint32 GetMultiStringValue([in] uint32 hDefKey,[in] string sSubKeyName,[in] string sValueName,[out] string sValue)
End Sub

Public Sub StdRegProv_SetMultiStringValue()
    '数据类型为 REG_MULTI_SZ
    'uint32 SetMultiStringValue([in] uint32 hDefKey,[in] string sSubKeyName,[in] string sValueName,[in] string sValue)
End Sub

Public Sub StdRegProv_GetStringValue()
    '数据类型为 REG_SZ
    'uint32 GetStringValue([in] uint32 hDefKey,[in] string sSubKeyName,[in] string sValueName,[out] string sValue)
End Sub

Public Sub StdRegProv_SetStringValue()
    '数据类型为 REG_SZ
    'uint32 SetStringValue([in] uint32 hDefKey,[in] string sSubKeyName,[in] string sValueName,[in] string sValue)
End Sub

'Public Sub StdRegProv_GetQWORDValue()
    '数据类型为 REG_QWORD=3
    'uint32 GetQWORDValue([in] uint32 hDefKey,[in] string sSubKeyName,[in] string sValueName,[out] uint64 uValue)
'End Sub

'Public Sub StdRegProv_SetQWORDValue()
    '数据类型为 REG_QWORD=3
    'uint32 SetQWORDValue([in] uint32 hDefKey,[in] string sSubKeyName,[in] string sValueName,[in] uint64 uValue)
'End Sub

'Public Sub StdRegProv_GetSecurityDescriptor()
    'uint32 GetSecurityDescriptor([in] uint32 hDefKey,[in] string sSubKeyName,[out]  __SecurityDescriptor Descriptor)
'End Sub

'Public Sub StdRegProv_SetSecurityDescriptor()
    'uint32 SetSecurityDescriptor([in] uint32 hDefKey,[in] string sSubKeyName,[in]  __SecurityDescriptor Descriptor)
'End Sub

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值