奇怪,那在HKEY_LOCAL_MACHINE中的数据是给谁看的,难道应用程序都无法读取吗(只要不是管理员运行)?包括delphi的数据也在HKEY_LOCAL_MACHINE中有,当然HKEY_LOCAL_USER中也有。我就是觉得奇怪,是什么程序在使用HKEY_LOCAL_MACHINE中的数据,怎么使用?

解决方案 »

  1.   

    《转自VB版》一般的用户组如user没有权限更改本机的系统设置,也没有权限对HKEY_LOCAL_MACHINE下的键执行RegOpenKeyEx。
    您可以利用LogonUser,ImpersonateLoggedOnUser,RevertToSelf等函数让用户自动以指定用户帐号loggon,获得权限,执行完操作后logoff,恢复到用户原来的权限。如下例让用户查询系统硬件信息:在Module中添加:
    Public Declare Function LogonUser Lib "advapi32.dll" _
       Alias "LogonUserA" (ByVal lpszUsername As String, _
       ByVal lpszDomain As String, ByVal lpszPassword As String, _
       ByVal dwLogonType As Long, ByVal dwLogonProvider As Long, _
       phToken As Long) As LongPublic Declare Function ImpersonateLoggedOnUser Lib "advapi32.dll" (ByVal hToken As Long) As Long
    Public Declare Function RevertToSelf Lib "advapi32.dll" () As Long在Form中添加:
    Private Declare Function RegOpenKeyEx Lib "advapi32.dll" Alias "RegOpenKeyExA" ( _
       ByVal hKey As Long, _
       ByVal lpSubKey As String, _
       ByVal ulOptions As Long, _
       ByVal samDesired As Long, _
       phkResult As Long) As LongPrivate Declare Function RegQueryValueEx Lib "advapi32.dll" Alias "RegQueryValueExA" ( _
       ByVal hKey As Long, _
       ByVal lpValueName As String, _
       ByVal lpReserved As Long, _
       ByVal lpType As Long, _
       ByVal lpData As String, _
       lpcbData As Long _
    ) As LongPrivate Declare Function RegCloseKey Lib "advapi32.dll" ( _
       ByVal hKey As Long _
    ) As LongPrivate szData As String * 255Private Const KEY_CREATE_LINK = &H20
    Private Const KEY_CREATE_SUB_KEY = &H4
    Private Const KEY_ENUMERATE_SUB_KEYS = &H8
    Private Const STANDARD_RIGHTS_ALL = &H1F0000
    Private Const KEY_QUERY_VALUE = &H1
    Private Const KEY_SET_VALUE = &H2
    Private Const KEY_NOTIFY = &H10
    Private Const SYNCHRONIZE = &H100000Private Const KEY_ALL_ACCESS = ((STANDARD_RIGHTS_ALL Or KEY_QUERY_VALUE Or _
    KEY_SET_VALUE Or KEY_CREATE_SUB_KEY Or KEY_ENUMERATE_SUB_KEYS Or KEY_NOTIFY Or _
    KEY_CREATE_LINK) And (Not SYNCHRONIZE))Private Const HKEY_LOCAL_MACHINE = &H80000002 Private Const LOGON32_LOGON_INTERACTIVE = 2
          Private Const LOGON32_PROVIDER_DEFAULT = 0    Public Sub Logon(ByVal strAdminUser As String, ByVal _
       strAdminPassword As String, ByVal strAdminDomain As String)
            Dim lngTokenHandle, lngLogonType, lngLogonProvider As Long
            Dim blnResult As Boolean
            
            lngLogonType = LOGON32_LOGON_INTERACTIVE
            lngLogonProvider = LOGON32_PROVIDER_DEFAULT
            
            blnResult = RevertToSelf()
            
            blnResult = LogonUser(strAdminUser, strAdminDomain, strAdminPassword, _
                                                 lngLogonType, lngLogonProvider, _
                                                 lngTokenHandle)
                                                                 
            blnResult = ImpersonateLoggedOnUser(lngTokenHandle)
          End Sub      Public Sub Logoff()
            Dim blnResult As Boolean
            
            blnResult = RevertToSelf()
          End Sub
          
    Private Sub Command1_Click()Logon "AdminUsername", "password", "DomainName"    Dim RetVal As Integer
        Dim szValue As String
        
        Dim hKey As Long
        Dim sType As Long
        
        
           RetVal = RegOpenKeyEx(HKEY_LOCAL_MACHINE, "HARDWARE\DEVICEMAP\KEYBOARDCLASS", 0&, KEY_ALL_ACCESS, hKey)
     
        If ((RegQueryValueEx(hKey, "\Device\KeyboardClass0", 0, sType, szData, Len(szData))) <> 0) Then
        
           ' Error Handling ---- Something Wrong
           MsgBox "regQuery error"
        Else
        
           ' Error Handling ---- Nothing Wrong
           Text1.Text = szData
          
        End If
        
        RetVal = RegCloseKey(hKey)
        
    LogoffEnd Sub详细信息请请参考:
    Q248187 HOWTO: Impersonate a User from Active Server Pages
    http://support.microsoft.com/support/kb/articles/q248/1/87.asp
    Registry Functions
    http://msdn.microsoft.com/library/en-us/sysinfo/regapi_59mb.asp- 微软全球技术中心 VB技术支持