Code: Select all
; =======================================================================================
; Update the Registry
; =======================================================================================
Procedure UpdateRegistry()
Protected iIndex.i
Protected lpData.s
Protected lpType.i
Protected result.i
Protected lpcbData.i
Protected keyValue.s
Protected dispString.s
Protected networkKey.s
Protected classNumber.s
Protected lpValueName.s
Protected registryKey.i
Protected NetCfgInstanceId.s
Protected lpcchValueName.i = 1024
Protected keyValueNeeded.s = "TAP-Windows Adapter V9"
Protected netgearVPN.s = "NETGEAR-VPN"
Protected registryLevel.s = "SYSTEM\CurrentControlSet\Control\Class\{4d36e972-e325-11ce-bfc1-08002be10318}"
; loop through the potential number of entries for the network devices
For iIndex=0 To 999
classNumber = RSet(Str(iIndex), 4, "0")
networkKey = registryLevel + "\" + classNumber
result = RegOpenKeyEx_(#HKEY_LOCAL_MACHINE, networkKey, 0, #KEY_READ, @registryKey)
If result = #ERROR_SUCCESS
dispString = "Opened registry entry HKLM\" + networkKey
WriteToLog(@dispString)
lpData = Space(lpcchValueName)
lpValueName = "DriverDesc"
lpcbData = 1024
result = RegQueryValueEx_(registryKey, lpValueName, 0, @lpType, @lpData, @lpcbData)
If result = #ERROR_SUCCESS
keyValue = Trim(lpData)
If keyValue = keyValueNeeded
lpData = Space(lpcchValueName)
lpValueName = "NetCfgInstanceId"
lpcbData = 1024
result = RegQueryValueEx_(registryKey, lpValueName, 0, @lpType, @lpData, @lpcbData)
If result = #ERROR_SUCCESS
NetCfgInstanceId = Trim(lpData)
dispString = "NetCfgInstanceId = " + NetCfgInstanceId
WriteToLog(@dispString)
iIndex = 999
Else
dispString = "Error reading " + lpValueName
WriteToLog(@dispString)
EndIf
EndIf
Else
dispString = "Key " + lpValueName + " does not exit"
WriteToLog(@dispString)
ProcedureReturn #False
EndIf
Else
dispString = "Unable to open registry entry HKLM\" + networkKey
WriteToLog(@dispString)
ProcedureReturn #False
EndIf
; close the open key after each iteration
RegCloseKey_(registryKey)
Next
; now check the network config instance key for 'NETGEAR-VPN'
If NetCfgInstanceId > ""
registryLevel = "SYSTEM\CurrentControlSet\Control\Network\{4d36e972-e325-11ce-bfc1-08002be10318}"
networkKey = registryLevel + "\" + NetCfgInstanceId + "\Connection"
result = RegOpenKeyEx_(#HKEY_LOCAL_MACHINE, networkKey, 0, #KEY_ALL_ACCESS, @registryKey)
If result = #ERROR_SUCCESS
; now see if we need to update the 'Name' value
lpData = Space(lpcchValueName)
lpValueName = "Name"
lpcbData = 1024
result = RegQueryValueEx_(registryKey, lpValueName, 0, @lpType, @lpData, @lpcbData)
If result = #ERROR_SUCCESS
keyValue = Trim(lpData)
If keyValue = netgearVPN; 'NETGEAR-VPN' set above
dispString = "The registry entry 'Name' in HKLM\" + networkKey + " is already to " + netgearVPN + ", no modification required"
WriteToLog(@dispString)
Else
result = RegSetValueEx_(registryKey, lpValueName, 0, #REG_SZ, netgearVPN, StringByteLength(netgearVPN) + SizeOf(Character))
If result = #ERROR_SUCCESS
dispString = "Modified the registry entry 'Name' in HKLM\" + networkKey + " to " + netgearVPN
WriteToLog(@dispString)
Else
dispString = "Unable to modify the registy entry 'Name' in HKLM\" + networkKey
WriteToLog(@dispString)
ProcedureReturn #False
EndIf
EndIf
RegCloseKey_(registryKey)
Else
RegCloseKey_(registryKey)
dispString = "Unable to find 'Name' in HKLM\" + networkKey
WriteToLog(@dispString)
ProcedureReturn #False
EndIf
Else
dispString = "Unable to open HKLM\" + networkKey
WriteToLog(@dispString)
ProcedureReturn #False
EndIf
Else
dispString = "Unable to find " + keyValueNeeded + " in registry entry HKLM\" + registryLevel + networkKey
WriteToLog(@dispString)
ProcedureReturn #False
EndIf
dispString = "Updated the registry successfully."
WriteToLog(@dispString)
ProcedureReturn #True
EndProcedure