' 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