www.pudn.com > ownfirewall > Registry.bas
Attribute VB_Name = "Registry"
Option Explicit
'HKeys
Public Const HKEY_CLASSES_ROOT = &H80000000
Public Const HKEY_CURRENT_USER = &H80000001
Public Const HKEY_LOCAL_MACHINE = &H80000002
Public Const HKEY_USERS = &H80000003
Public Const HKEY_PERFORMANCE_DATA = &H80000004
Public Const HKEY_CURRENT_CONFIG = &H80000005
Public Const HKEY_DYN_DATA = &H80000006
Public Const REG_OPTION_NON_VOLATILE = 0&
Public Const REG_OPTION_VOLATILE = &H1
Public Const REG_CREATED_NEW_KEY = &H1
Public Const REG_OPENED_EXISTING_KEY = &H2
Public Const SPECIFIC_RIGHTS_ALL = &HFFFF
Public Const ERROR_SUCCESS = 0&
Public Const ERROR_ACCESS_DENIED = 5
Public Const ERROR_INVALID_DATA = 13&
Public Const ERROR_MORE_DATA = 234
Public Const ERROR_NO_MORE_ITEMS = 259
'DataTypes
Public Const REG_NONE = 0
Public Const REG_SZ = 1
Public Const REG_EXPAND_SZ = 2
Public Const REG_BINARY = 3
Public Const REG_DWORD = 4
Public Const REG_DWORD_LITTLE_ENDIAN = 4
Public Const REG_DWORD_BIG_ENDIAN = 5
Public Const REG_LINK = 6
Public Const REG_MULTI_SZ = 7
Public Const REG_RESOURCE_LIST = 8
Public Const REG_FULL_RESOURCE_DESCRIPTOR = 9
Public Const REG_RESOURCE_REQUIREMENTS_LIST = 10
Const SYNCHRONIZE = &H100000
Const STANDARD_RIGHTS_READ = &H20000
Const STANDARD_RIGHTS_WRITE = &H20000
Const STANDARD_RIGHTS_EXECUTE = &H20000
Const STANDARD_RIGHTS_REQUIRED = &HF0000
Const STANDARD_RIGHTS_ALL = &H1F0000
'Right's for the OpenRegistry
Public Const KEY_QUERY_VALUE = &H1
Public Const KEY_SET_VALUE = &H2
Public Const KEY_CREATE_SUB_KEY = &H4
Public Const KEY_ENUMERATE_SUB_KEYS = &H8
Public Const KEY_NOTIFY = &H10
Public Const KEY_CREATE_LINK = &H20
Public Const READ_CONTROL = &H20000
Public Const KEY_WRITE = &H20006
Public Const KEY_ALL_ACCESS = &H2003F ' &H3F
Const KEY_READ = ((STANDARD_RIGHTS_READ Or KEY_QUERY_VALUE Or KEY_ENUMERATE_SUB_KEYS Or KEY_NOTIFY) And (Not SYNCHRONIZE))
Public Const KEY_READ_WRITE = (KEY_READ And KEY_WRITE)
' Registry location
Public Const gREGKEYLocation = "SOFTWARE\Your Company Name\Your App Name\Your Current Version"
Public Const gREGKEYXPos = "XPos"
Public Const gREGKEYYPos = "YPos"
Public Const gREGKEYWidth = "Width"
Public Const gREGKEYHeight = "Height"
Public Const gREGKEYWindowState = "WindowState"
Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long
Declare Function RegCreateKey Lib "advapi32.dll" Alias "RegCreateKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
Declare Function RegDeleteKey Lib "advapi32.dll" Alias "RegDeleteKeyA" (ByVal hKey As Long, ByVal lpSubKey As String) As Long
Declare Function RegDeleteValue Lib "advapi32.dll" Alias "RegDeleteValueA" (ByVal hKey As Long, ByVal lpValueName As String) As Long
Declare Function RegEnumKey Lib "advapi32.dll" Alias "RegEnumKeyA" (ByVal hKey As Long, ByVal dwIndex As Long, ByVal lpName As String, ByVal cbName As Long) As Long
Declare Function RegEnumValue Lib "advapi32.dll" _
Alias "RegEnumValueA" (ByVal hKey As Long, ByVal dwIndex As Long, _
ByVal lpValueName As String, lpcbValueName As Long, ByVal lpReserved As Long, _
lpType As Long, lpData As Any, lpcbData As Long) As Long
Declare Function RegFlushKey Lib "advapi32.dll" (ByVal hKey As Long) As Long
Declare Function RegLoadKey Lib "advapi32.dll" Alias "RegLoadKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal lpFile As String) As Long
Declare Function RegNotifyChangeKeyValue Lib "advapi32.dll" (ByVal hKey As Long, ByVal bWatchSubtree As Long, ByVal dwNotifyFilter As Long, ByVal hEvent As Long, ByVal fAsynchronus As Long) As Long
Declare Function RegOpenKey Lib "advapi32.dll" Alias "RegOpenKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
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 Long
Declare Function RegQueryValue Lib "advapi32.dll" Alias "RegQueryValueA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal lpValue As String, lpcbValue As Long) As Long
Declare Function RegQueryValueExNULL Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, ByVal lpData As Long, lpcbData As Long) As Long
Declare Function RegQueryValueEx Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, lpData As Any, lpcbData As Long) As Long
Public Declare Function RegQueryValueExStr Lib "advapi32" Alias "RegQueryValueExA" _
(ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, _
ByRef lpType As Long, ByVal szData As String, ByRef lpcbData As Long) As Long
Public Declare Function RegQueryValueExLong Lib "advapi32" Alias "RegQueryValueExA" _
(ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, _
ByRef lpType As Long, szData As Long, ByRef lpcbData As Long) As Long
Public Declare Function RegQueryValueExByte Lib "advapi32" Alias "RegQueryValueExA" _
(ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, _
ByRef lpType As Long, szData As Byte, ByRef lpcbData As Long) As Long
Declare Function RegQueryInfoKey Lib "advapi32.dll" Alias "RegQueryInfoKeyA" _
(ByVal hKey As Long, ByVal lpClass As String, _
lpcbClass As Long, ByVal lpReserved As Long, lpcSubKeys As Long, _
lpcbMaxSubKeyLen As Long, lpcbMaxClassLen As Long, lpcValues As Long, _
lpcbMaxValueNameLen As Long, lpcbMaxValueLen As Long, lpcbSecurityDescriptor As Long, _
lpftLastWriteTime As Any) As Long
Declare Function RegReplaceKey Lib "advapi32.dll" Alias "RegReplaceKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal lpNewFile As String, ByVal lpOldFile As String) As Long
Declare Function RegRestoreKey Lib "advapi32.dll" Alias "RegRestoreKeyA" (ByVal hKey As Long, ByVal lpFile As String, ByVal dwFlags As Long) As Long
Declare Function RegSetValue Lib "advapi32.dll" Alias "RegSetValueA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal dwType As Long, ByVal lpData As String, ByVal cbData As Long) As Long
Declare Function RegSetValueEx Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, lpData As Any, ByVal cbData As Long) As Long
Declare Function RegUnLoadKey Lib "advapi32.dll" Alias "RegUnLoadKeyA" (ByVal hKey As Long, ByVal lpSubKey As String) As Long
Declare Function GetShortPathName Lib "kernel32" Alias "GetShortPathNameA" (ByVal lpszLongPath As String, ByVal lpszShortPath As String, ByVal cchBuffer As Long) As Long
Declare Function ExpandEnvironmentStrings Lib "kernel32" Alias "ExpandEnvironmentStringsA" (ByVal lpSrc As String, ByVal lpDst As String, ByVal nSize As Long) As Long
Type hKeys
Class As Long
Key As String
Name As String
End Type
Public hKeys(9) As hKeys
Global sKeys() As String, iKeyCount As Long
Global bkey As String, ikey As Integer
Global dell As String, ell As String
Global rell As String, gell As String
Global hell As String, nell As String
Global dill As String, fril As Integer
Global nname As String, nkey As String
Global nsubkey As String, npath As String
Global MainKeys(50) As String
Global SubKeys(50) As String
Global Cretnew As Boolean
Global classkey As String
Global sectionkey As String
Global Valuekey As String
Global m_vDefault As Variant
Function ExpandEnvStr(sData As String) As String
Dim c As Long, s As String
s = ""
c = ExpandEnvironmentStrings(sData, s, c)
s = String$(c - 1, 0)
c = ExpandEnvironmentStrings(sData, s, c)
ExpandEnvStr = s
End Function
Function SwapEndian(ByVal dw As Long) As Long
CopyMemory ByVal VarPtr(SwapEndian) + 3, dw, 1
CopyMemory ByVal VarPtr(SwapEndian) + 2, ByVal VarPtr(dw) + 1, 1
CopyMemory ByVal VarPtr(SwapEndian) + 1, ByVal VarPtr(dw) + 2, 1
CopyMemory SwapEndian, ByVal VarPtr(dw) + 3, 1
End Function
Public Function getstring(hKey As Long, strPath As String, strValue As String)
Dim keyhand As Long
Dim datatype As Long, r As Long
r = RegOpenKey(hKey, strPath, keyhand)
getstring = RegQueryStringValue(keyhand, strValue)
r = RegCloseKey(keyhand)
End Function
Function StripTerminator(ByVal strString As String) As String
Dim intZeroPos As Integer
intZeroPos = InStr(strString, Chr$(0))
If intZeroPos > 0 Then
StripTerminator = Left$(strString, intZeroPos - 1)
Else
StripTerminator = strString
End If
End Function
Public Sub savestring(hKey As Long, strPath As String, strValue As String, strdata As String)
Dim keyhand As Long, r As Long
r = RegCreateKey(hKey, strPath, keyhand)
r = RegSetValueEx(keyhand, strValue, 0, REG_SZ, ByVal strdata, Len(strdata))
r = RegCloseKey(keyhand)
End Sub
Sub Wait(Seconds As Long)
Dim StartTime As Long
StartTime = Timer
Do While Timer < StartTime + Seconds
DoEvents
Loop
End Sub
Function Short_Name(Long_Path As String) As String
'Returns short path of the passed long path
Dim Short_Path As String
Dim Answer As Long
Short_Path = Space(250)
Answer = GetShortPathName(Long_Path, Short_Path, Len(Short_Path))
If Answer Then
Short_Name = Left$(Short_Path, Answer)
End If
End Function
Function DeleteKey(ByVal classkey As Long, ByVal sectionkey As String) As Boolean
Dim e As Long
e = RegDeleteKey(classkey, sectionkey)
If e Then
WriteLog "Failed to delete registry Key: '" & classkey & "',Section: '" & sectionkey
Else
DeleteKey = (e = ERROR_SUCCESS)
End If
End Function
Function DeleteValue(ByVal classkey As Long, ByVal sectionkey As String, ByVal Valuekey As String) As Boolean
Dim e As Long
Dim hKey As Long
e = RegOpenKeyEx(classkey, sectionkey, 0, KEY_ALL_ACCESS, hKey)
If e Then
WriteLog "Failed to open key '" & classkey & "',Section: '" & sectionkey & "' for delete access"
Else
e = RegDeleteValue(hKey, Valuekey)
If e Then
WriteLog "Failed to delete registry Key: '" & classkey & "',Section: '" & sectionkey & "',Key: '" & Valuekey
Else
DeleteValue = (e = ERROR_SUCCESS)
End If
End If
End Function
Function EnumerateValues(ByRef sKeyNames() As String, ByRef iKeyCount As Long) As Boolean
Dim lResult As Long
Dim hKey As Long
Dim sName As String
Dim lNameSize As Long
Dim sData As String
Dim lIndex As Long
Dim cJunk As Long
Dim cNameMax As Long
Dim ft As Currency
iKeyCount = 0
Erase sKeyNames()
lIndex = 1
lResult = RegOpenKeyEx(classkey, sectionkey, 0, KEY_QUERY_VALUE, hKey)
If (lResult = ERROR_SUCCESS) Then
lResult = RegQueryInfoKey(hKey, "", cJunk, 0, cJunk, cJunk, cJunk, cJunk, cNameMax, cJunk, cJunk, ft)
Do While lResult = ERROR_SUCCESS
lNameSize = cNameMax + 1
sName = String$(lNameSize, 0)
If (lNameSize = 0) Then lNameSize = 1
lResult = RegEnumValue(hKey, lIndex, sName, lNameSize, 0&, 0&, 0&, 0&)
If (lResult = ERROR_SUCCESS) Then
sName = Left$(sName, lNameSize)
iKeyCount = iKeyCount + 1
ReDim Preserve sKeyNames(1 To iKeyCount) As String
sKeyNames(iKeyCount) = sName
End If
lIndex = lIndex + 1
Loop
End If
If (hKey <> 0) Then
RegCloseKey hKey
End If
EnumerateValues = True
Exit Function
EnumerateValuesError:
If (hKey <> 0) Then
RegCloseKey hKey
End If
WriteLog "Registry: " & err.Description
Exit Function
End Function
Function EnumerateSections(ByRef sSect() As String, ByRef iSectCount As Long) As Boolean
Dim lResult As Long
Dim hKey As Long
Dim dwReserved As Long
Dim szBuffer As String
Dim lBuffSize As Long
Dim lIndex As Long
Dim lType As Long
Dim sCompKey As String
Dim iPos As Long
On Error GoTo EnumerateSectionsError
iSectCount = 0
Erase sSect
lIndex = 0
lResult = RegOpenKeyEx(classkey, sectionkey, 0, KEY_ENUMERATE_SUB_KEYS, hKey)
Do While lResult = ERROR_SUCCESS
szBuffer = String$(255, 0)
lBuffSize = Len(szBuffer)
lResult = RegEnumKey(hKey, lIndex, szBuffer, lBuffSize)
If (lResult = ERROR_SUCCESS) Then
iSectCount = iSectCount + 1
ReDim Preserve sSect(1 To iSectCount) As String
iPos = InStr(szBuffer, Chr$(0))
If (iPos > 0) Then
sSect(iSectCount) = Left(szBuffer, iPos - 1)
Else
sSect(iSectCount) = Left(szBuffer, lBuffSize)
End If
End If
lIndex = lIndex + 1
Loop
If (hKey <> 0) Then
RegCloseKey hKey
End If
EnumerateSections = True
Exit Function
EnumerateSectionsError:
If (hKey <> 0) Then
RegCloseKey hKey
End If
WriteLog "Registry: " & err.Description
Exit Function
End Function
Function Value(classkey As Long, sectionkey As String) As Variant
Dim vValue As Variant
Dim cData As Long, sData As String, ordType As Long, e As Long
Dim hKey As Long
Valuekey = ""
e = RegOpenKeyEx(classkey, sectionkey, 0, KEY_QUERY_VALUE, hKey)
e = RegQueryValueExLong(hKey, Valuekey, 0&, ordType, 0&, cData)
If e And e <> ERROR_MORE_DATA Then
Value = "m_vDefault"
Exit Function
End If
Select Case ordType
Case REG_DWORD, REG_DWORD_LITTLE_ENDIAN
Dim iData As Long
e = RegQueryValueExLong(hKey, Valuekey, 0&, ordType, iData, cData)
vValue = CLng(iData)
Case REG_DWORD_BIG_ENDIAN
Dim dwData As Long
e = RegQueryValueExLong(hKey, Valuekey, 0&, ordType, dwData, cData)
vValue = SwapEndian(dwData)
Case REG_SZ, REG_MULTI_SZ
sData = String$(cData - 1, 0)
e = RegQueryValueExStr(hKey, Valuekey, 0&, ordType, sData, cData)
vValue = sData
Case REG_EXPAND_SZ
sData = String$(cData - 1, 0)
e = RegQueryValueExStr(hKey, Valuekey, 0&, ordType, sData, cData)
vValue = ExpandEnvStr(sData)
Case Else
Dim abData() As Byte
ReDim abData(cData)
e = RegQueryValueExByte(hKey, Valuekey, 0&, ordType, abData(0), cData)
vValue = abData
End Select
Value = vValue
End Function
Function QueryValueEx(ByVal lhKey As Long, ByVal szValueName As String, vValue As Variant) As Long
Dim cch As Long
Dim lrc As Long
Dim lType As Long
Dim lValue As Long
Dim sValue As String
On Error GoTo QueryValueExError
' Determine the size and type of data to be read
lrc = RegQueryValueExNULL(lhKey, szValueName, 0&, lType, 0&, cch)
If lrc <> ERROR_SUCCESS Then Error 5
Select Case lType
' For strings
Case REG_SZ:
sValue = String(cch, 0)
lrc = RegQueryValueExStr(lhKey, szValueName, 0&, lType, sValue, cch)
If lrc = ERROR_SUCCESS Then
vValue = Left$(sValue, cch)
Else
vValue = Empty
End If
' For DWORDS
Case REG_DWORD:
lrc = RegQueryValueExLong(lhKey, szValueName, 0&, lType, lValue, cch)
If lrc = ERROR_SUCCESS Then vValue = lValue
Case Else
'all other data types not supported
lrc = -1
End Select
QueryValueExExit:
QueryValueEx = lrc
Exit Function
QueryValueExError:
Resume QueryValueExExit
End Function
Function QueryValue(lPredefinedKey As Long, sKeyName As String, sValueName As String)
Dim lRetVal As Long 'result of the API functions
Dim hKey As Long 'handle of opened key
Dim vValue As Variant 'setting of queried value
lRetVal = RegOpenKeyEx(lPredefinedKey, sKeyName, 0, KEY_ALL_ACCESS, hKey)
lRetVal = QueryValueEx(hKey, sValueName, vValue)
'MsgBox vValue
QueryValue = vValue
RegCloseKey (hKey)
End Function
Function GetKey(Class As Long, Section As String, Keys() As String) As Long
Dim lngKeyHandle As Long
Dim lngResult As Long
Dim lngCurIdx As Long
Dim strValue As String
Dim lngValueLen As Long
Dim lngData As Long
Dim lngDataLen As Long
Dim strResult As String
Dim Str1 As String
lngResult = RegOpenKeyEx(Class, Section, 0&, KEY_READ, lngKeyHandle)
If lngResult <> ERROR_SUCCESS Then
'MsgBox "Cannot open key"
Exit Function
End If
lngCurIdx = 0
Do
lngValueLen = 2000
strValue = String(lngValueLen, 0)
lngDataLen = 2000
lngResult = RegEnumValue(lngKeyHandle, lngCurIdx, ByVal strValue, lngValueLen, 0&, REG_DWORD, ByVal lngData, lngDataLen)
lngCurIdx = lngCurIdx + 1
If lngResult = ERROR_SUCCESS Then
strResult = Left(strValue, lngValueLen)
Keys(lngCurIdx) = strResult
Else
Keys(lngCurIdx) = ""
End If
Loop While lngResult = ERROR_SUCCESS
Call RegCloseKey(lngKeyHandle)
GetKey = lngCurIdx - 1
End Function
Function RegQueryStringValue(ByVal hKey As Long, ByVal strValueName As String) As String
Dim lResult As Long
Dim lValueType As Long
Dim strBuf As String
Dim lDataBufSize As Long
Dim ERROR_SUCCESS
On Error GoTo 0
lResult = RegQueryValueEx(hKey, strValueName, 0&, lValueType, ByVal 0&, lDataBufSize)
If lResult = ERROR_SUCCESS Then
If lValueType = REG_SZ Then
strBuf = String(lDataBufSize, " ")
lResult = RegQueryValueEx(hKey, strValueName, 0&, 0&, ByVal strBuf, lDataBufSize)
If lResult = ERROR_SUCCESS Then
RegQueryStringValue = strBuf
End If
End If
End If
End Function
Sub LoadKeys()
hKeys(1).Class = HKEY_LOCAL_MACHINE
hKeys(1).Key = "Software\Microsoft\Windows\CurrentVersion\Run"
hKeys(1).Name = "Machine Run"
hKeys(2).Class = HKEY_LOCAL_MACHINE
hKeys(2).Key = "Software\Microsoft\Windows\CurrentVersion\RunOnce"
hKeys(2).Name = "Machine RunOnce"
hKeys(3).Class = HKEY_LOCAL_MACHINE
hKeys(3).Key = "Software\Microsoft\Windows\CurrentVersion\RunOnceEx"
hKeys(3).Name = "Machine RunOnceEx"
hKeys(4).Class = HKEY_LOCAL_MACHINE
hKeys(4).Key = "Software\Microsoft\Windows\CurrentVersion\RunServices"
hKeys(4).Name = "Machine RunServices"
hKeys(5).Class = HKEY_LOCAL_MACHINE
hKeys(5).Key = "Software\Microsoft\Windows\CurrentVersion\RunServicesOnce"
hKeys(5).Name = "Machine RunServicesOnce"
hKeys(6).Class = HKEY_CURRENT_USER
hKeys(6).Key = "Software\Microsoft\Windows\CurrentVersion\Run"
hKeys(6).Name = "Per User Run"
hKeys(7).Class = HKEY_CURRENT_USER
hKeys(7).Key = "Software\Microsoft\Windows\CurrentVersion\RunOnce"
hKeys(7).Name = "Per User RunOnce"
hKeys(8).Class = HKEY_CURRENT_USER
hKeys(8).Key = "Software\Microsoft\Windows\CurrentVersion\RunServices"
hKeys(8).Name = "Per User RunServices"
hKeys(9).Class = HKEY_CURRENT_USER
hKeys(9).Key = "Software\Mirabilis\ICQ\Agent\Apps;Path"
hKeys(9).Name = "ICQ AutoStart"
End Sub