CodeGuru Home VC++ / MFC / C++ .NET / C# Visual Basic VB Forums Developer.com
Results 1 to 2 of 2
  1. #1
    Join Date
    Feb 2001
    Posts
    7

    Registry Access Priviledges

    I need to obtain Read access or Enumerate_Subkeys access to the System node under HKEY_LOCAL_MACHINE of the registry. I have no problem doing this on 98' however NT and 2000 seem to have security restriction on this node. I can open this node through Regedit on 2000 but not programmatically. Could someone help me please. I have attempted to open the node with RegOpenKeyEx and RegCreateKey. Help someone is going to beat me!


  2. #2
    Join Date
    Apr 2001
    Location
    Stockholm, Sweden
    Posts
    4

    Re: Registry Access Priviledges

    Here are som reg functions for you..

    Public Function EnumValue(ByVal lpSubKey As String, ByVal strValue As String) As String
    Dim hKey As Long 'RegCreateKeyEx
    Dim lpClass As String 'RegCreateKeyEx
    Dim dwOptions As Long 'RegCreateKeyEx
    Dim samDesired As Long 'RegCreateKeyEx
    Dim lpSecurityAttributes As SECURITY_ATTRIBUTES 'RegCreateKeyEx
    Dim phkResult As Long 'RegCreateKeyEx
    Dim lpdwDisposition As Long 'RegCreateKeyEx

    Dim dwIndex As Long 'RegEnumValue
    Dim nameBuffer(100) As Byte 'RegEnumValue
    Dim lpcbValueName As Long 'RegEnumValue
    Dim lpReserved As Long 'RegEnumValue
    Dim lpType As Long 'RegEnumValue
    Dim valueBuffer(100) As Byte 'RegEnumValue
    Dim lpcbData As Long 'RegEnumValue

    Dim Name As String
    Dim value As String
    Dim strRet As String

    Dim iReturnValue As Long

    On Error GoTo ErrorHandler

    hKey = HKEY_LOCAL_MACHINE
    lpClass = ""
    dwOptions = REG_OPTION_NON_VOLATILE
    samDesired = KEY_ALL_ACCESS

    dwIndex = 0
    lpcbValueName = 100
    lpcbData = 100

    iReturnValue = RegCreateKeyEx(hKey, lpSubKey, 0, lpClass, dwOptions, samDesired, lpSecurityAttributes, phkResult, lpdwDisposition)
    If iReturnValue <> ERROR_SUCCESS Then Err.Raise ERROR_REGCREATEKEYEX

    Do
    iReturnValue = RegEnumValue(phkResult, dwIndex, nameBuffer(0), lpcbValueName, lpReserved, lpType, valueBuffer(0), lpcbData)
    If iReturnValue <> ERROR_SUCCESS Then Err.Raise ERROR_REGENUMVALUE

    Dim iName As Long
    For iName = 0 To lpcbValueName - 1
    Name = Name & Chr(nameBuffer(iName))
    Next iName

    Dim iValue As Long
    For iValue = 0 To lpcbData - 2
    value = value & Chr(valueBuffer(iValue))
    Next iValue

    If LCase(Name) = LCase(strValue) Then
    strRet = value
    Exit Do
    End If

    'CLEAN UP
    lpcbValueName = 100
    lpcbData = 100
    Name = ""
    value = ""
    dwIndex = dwIndex + 1
    For iName = 0 To 100
    nameBuffer(iName) = 0
    Next iName
    For iValue = 0 To 100
    valueBuffer(iValue) = 0
    Next iValue
    'END CLEAN UP
    Loop Until iReturnValue = ERROR_NO_MORE_ITEMS

    iReturnValue = RegCloseKey(phkResult)
    If iReturnValue <> ERROR_SUCCESS Then Err.Raise ERROR_REGCLOSEKEY

    EnumValue = strRet
    Exit Function
    ErrorHandler:
    If Err.Number = ERROR_REGENUMVALUE Then
    EnumValue = ""
    Else
    Err.Raise Number:=ERROR_ENUMVALUE, Description:="ERROR_ENUMVALUE"
    End If
    End Function

    Public Function EnumValues(ByVal lpSubKey As String) As String()
    Dim hKey As Long 'RegCreateKeyEx
    Dim lpClass As String 'RegCreateKeyEx
    Dim dwOptions As Long 'RegCreateKeyEx
    Dim samDesired As Long 'RegCreateKeyEx
    Dim lpSecurityAttributes As SECURITY_ATTRIBUTES 'RegCreateKeyEx
    Dim phkResult As Long 'RegCreateKeyEx
    Dim lpdwDisposition As Long 'RegCreateKeyEx

    Dim dwIndex As Long 'RegEnumValue
    Dim nameBuffer(100) As Byte 'RegEnumValue
    Dim lpcbValueName As Long 'RegEnumValue
    Dim lpReserved As Long 'RegEnumValue
    Dim lpType As Long 'RegEnumValue
    Dim valueBuffer(100) As Byte 'RegEnumValue
    Dim lpcbData As Long 'RegEnumValue

    Dim Name As String
    Dim value As String
    Dim strRet() As String
    Dim i As Long
    Dim iReturnValue As Long
    Dim iName As Long

    On Error GoTo ErrorHandler

    hKey = HKEY_LOCAL_MACHINE
    lpClass = ""
    dwOptions = REG_OPTION_NON_VOLATILE
    samDesired = KEY_ALL_ACCESS

    dwIndex = 0
    lpcbValueName = 100
    lpcbData = 100

    iReturnValue = RegCreateKeyEx(hKey, lpSubKey, 0, lpClass, dwOptions, samDesired, lpSecurityAttributes, phkResult, lpdwDisposition)
    If iReturnValue <> ERROR_SUCCESS Then Err.Raise ERROR_REGCREATEKEYEX

    Do
    iReturnValue = RegEnumValue(phkResult, dwIndex, nameBuffer(0), lpcbValueName, lpReserved, lpType, valueBuffer(0), lpcbData)
    If iReturnValue <> ERROR_SUCCESS And iReturnValue <> ERROR_NO_MORE_ITEMS Then Err.Raise ERROR_REGENUMVALUE
    For iName = 0 To lpcbValueName - 1
    Name = Name & Chr(nameBuffer(iName))
    Next iName

    If iReturnValue <> ERROR_NO_MORE_ITEMS Then
    i = i + 1
    ReDim Preserve strRet(i)
    strRet(i - 1) = Name
    End If

    'CLEAN UP
    lpcbValueName = 100
    lpcbData = 100
    Name = ""
    value = ""
    dwIndex = dwIndex + 1
    For iName = 0 To 100
    nameBuffer(iName) = 0
    Next iName
    'END CLEAN UP
    Loop Until iReturnValue = ERROR_NO_MORE_ITEMS

    iReturnValue = RegCloseKey(phkResult)
    If iReturnValue <> ERROR_SUCCESS Then Err.Raise ERROR_REGCLOSEKEY

    EnumValues = strRet
    Exit Function
    ErrorHandler:
    ReDim strRet(1)
    If Err.Number = ERROR_REGENUMVALUE Then
    strRet(0) = "EOF"
    EnumValues = strRet
    Else
    Err.Raise Number:=ERROR_ENUMVALUES, Description:="ERROR_ENUMVALUES"
    End If
    End Function

    Public Function SetValue(ByVal lpSubKey As String, ByVal lpValueName As String, ByVal lpData As String) As Long
    Dim hKey As Long
    Dim lpClass As String
    Dim dwOptions As Long
    Dim samDesired As Long
    Dim lpSecurityAttributes As SECURITY_ATTRIBUTES
    Dim phkResult As Long
    Dim lpdwDisposition As Long

    Dim dwType As Long
    Dim cbData As Long

    Dim iReturnValue As Long

    On Error GoTo ErrorHandler

    hKey = HKEY_LOCAL_MACHINE
    lpClass = ""
    dwOptions = REG_OPTION_NON_VOLATILE
    samDesired = KEY_ALL_ACCESS

    dwType = REG_SZ
    cbData = Len(lpData)

    iReturnValue = RegCreateKeyEx(hKey, lpSubKey, 0, lpClass, dwOptions, samDesired, lpSecurityAttributes, phkResult, lpdwDisposition)
    If iReturnValue <> ERROR_SUCCESS Then Err.Raise ERROR_REGCREATEKEY

    'Note that if you declare the lpData parameter as String, you must pass it By Value.
    iReturnValue = RegSetValueEx(phkResult, lpValueName, 0, dwType, ByVal lpData, cbData)
    If iReturnValue <> ERROR_SUCCESS Then Err.Raise ERROR_REGSETVALUEEX

    iReturnValue = RegCloseKey(phkResult)
    If iReturnValue <> ERROR_SUCCESS Then Err.Raise ERROR_REGCLOSEKEY

    SetValue = 0
    Exit Function
    ErrorHandler:
    Err.Raise Number:=ERROR_SETVALUE, Description:="ERROR_SETVALUE"
    End Function

    Public Function DeleteKey(ByVal lpSubKey As String) As Long
    Dim hKey As Long
    Dim iReturnValue As Long

    On Error GoTo ErrorHandler

    hKey = HKEY_LOCAL_MACHINE

    iReturnValue = RegDeleteKey(hKey, lpSubKey)
    If iReturnValue <> ERROR_SUCCESS Then Err.Raise ERROR_REGDELETEKEY

    DeleteKey = 0
    Exit Function
    ErrorHandler:
    Err.Raise Number:=ERROR_DELETEKEY, Description:="ERROR_DELETEKEY"
    End Function

    Public Function CreateKey(ByVal lpSubKey As String) As Long
    Dim hKey As Long
    Dim lpClass As String
    Dim dwOptions As Long
    Dim samDesired As Long
    Dim lpSecurityAttributes As SECURITY_ATTRIBUTES
    Dim phkResult As Long
    Dim lpdwDisposition As Long

    Dim iReturnValue As Long

    On Error GoTo ErrorHandler

    hKey = HKEY_LOCAL_MACHINE
    lpClass = ""
    dwOptions = REG_OPTION_NON_VOLATILE
    samDesired = KEY_ALL_ACCESS

    iReturnValue = RegCreateKeyEx(hKey, lpSubKey, 0, lpClass, dwOptions, samDesired, lpSecurityAttributes, phkResult, lpdwDisposition)
    If iReturnValue <> ERROR_SUCCESS Then Err.Raise ERROR_REGCREATEKEYEX

    iReturnValue = RegCloseKey(phkResult)
    If iReturnValue <> ERROR_SUCCESS Then Err.Raise ERROR_REGCLOSEKEY

    CreateKey = 0
    Exit Function
    ErrorHandler:
    Err.Raise Number:=ERROR_CREATEKEY, Description:="ERROR_CREATEKEY"
    End Function

    Public Function DeleteValue(ByVal lpSubKey As String, ByVal lpValueName As String) As Long
    Dim hKey As Long
    Dim lpClass As String
    Dim dwOptions As Long
    Dim samDesired As Long
    Dim lpSecurityAttributes As SECURITY_ATTRIBUTES
    Dim phkResult As Long
    Dim lpdwDisposition As Long

    Dim iReturnValue As Long

    On Error GoTo ErrorHandler

    hKey = HKEY_LOCAL_MACHINE
    lpClass = ""
    dwOptions = REG_OPTION_NON_VOLATILE
    samDesired = KEY_ALL_ACCESS

    iReturnValue = RegCreateKeyEx(hKey, lpSubKey, 0, lpClass, dwOptions, samDesired, lpSecurityAttributes, phkResult, lpdwDisposition)
    If iReturnValue <> ERROR_SUCCESS Then Err.Raise ERROR_REGCREATEKEYEX

    iReturnValue = RegDeleteValue(phkResult, lpValueName)
    If iReturnValue <> ERROR_SUCCESS Then Err.Raise ERROR_REGDELETEVALUE

    iReturnValue = RegCloseKey(phkResult)
    If iReturnValue <> ERROR_SUCCESS Then Err.Raise ERROR_REGCLOSEKEY

    DeleteValue = 0
    Exit Function
    ErrorHandler:
    Err.Raise Number:=ERROR_DELETEVALUE, Description:="ERROR_DELETEVALUE"
    End Function



Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  





Click Here to Expand Forum to Full Width

Featured