Alterar dados de Registro
A classe StdRegProv do Provedor de Registro do Sistema tem métodos que fazem o seguinte:
Criar ou excluir chaves do Registro.
Crie ou exclua valores nomeados, que são chamados de entradas quando estão sob chaves.
Use o nome de um novo valor e SetBinaryValue, SetDWORDValue, SetExpandedStringValue, SetMultiStringValue ou SetStringValue para criar um valor nomeado. Use DeleteValue para excluir um valor nomeado.
Altere os valores nomeados.
Use o nome de um valor e os métodos Set (identificados no item do marcador anterior) para alterar os valores nomeados existentes em uma chave. Você deve saber o nome de um valor para alterá-lo. Se você não souber os nomes de valor em uma chave, use o método EnumValues para obter os nomes.
As seguintes seções serão abordadas neste tópico:
- Criar uma chave do Registro usando o VBScript
- Criar um valor de Registro nomeado usando o PowerShell e o VBScript
Criar uma chave do Registro usando o VBScript
Como o Registro é o banco de dados de configuração central do sistema operacional, de aplicativos e de serviços, tenha cuidado ao gravar alterações nos valores do Registro ou excluir chaves.
Observação
Não é possível monitorar a subchave HKEY_CLASSES_ROOT da HKEY_CURRENT_USER(HKCU). O monitoramento HKEY_USERS não é recomendado porque as subchaves aparecem e desaparecem à medida que os hives são carregados.
Os exemplos de código a seguir mostram como criar uma chave do Registro e uma subchave.
HKEY_LOCAL_MACHINE = &H80000002
strComputer = "."
Set ObjRegistry = GetObject("winmgmts:{impersonationLevel = impersonate}!\\" & strComputer & "\root\default:StdRegProv")
strPath = "SOFTWARE\MyKey\MySubKey"
Return = objRegistry.CreateKey(HKEY_LOCAL_MACHINE, strPath)
If Return <> 0 Then
WScript.Echo "The operation failed." & Err.Number
WScript.Quit
Else
wScript.Echo "New registry key created" & VBCRLF & "HKLM\SOFTWARE\MYKey\"
End If
$HKEY_LOCAL_MACHINE = 2147483650
$strComputer = "."
$strPath = "SOFTWARE\MyKey\MySubKey"
$reg = [wmiclass]"\\$strComputer\root\default:StdRegprov"
[void]$reg.CreateKey($HKEY_LOCAL_MACHINE, $strPath)
Criar um valor de Registro nomeado usando o PowerShell e o VBScript
O exemplo de código a seguir mostra como criar um valor nomeado chamado MultiStringValue na chave HKEY_LOCAL_MACHINE\SOFTWARE\MyKey\MySubKey que o script anterior cria. O script chama StdRegProv.SetMultiStringValue para gravar valores de cadeia de caracteres em um novo valor nomeado.
const HKEY_LOCAL_MACHINE = &H80000002
strComputer = "."
Set objRegistry = _
GetObject("winmgmts:{impersonationLevel=impersonate}!\\" _
& strComputer & "\root\default:StdRegProv")
strKeyPath = "SOFTWARE\MyKey\MySubKey"
strValueName = "MultiStringValue"
arrStringValues = Array("one", "two","three", "four")
objRegistry.SetMultiStringValue HKEY_LOCAL_MACHINE, strKeyPath,_
strValueName, arrStringValues
' Read the values that were just written
objRegistry.GetMultiStringValue HKEY_LOCAL_MACHINE, strKeyPath,_
strValueName, arrStringValues
For Each strValue in arrStringValues
WScript.Echo strValue
Next
$HKEY_LOCAL_MACHINE = 2147483650
$strComputer = "."
$strPath = "SOFTWARE\MyKey\MySubKey"
$strValueName = "MultiStringValue"
$arrStringValues = @("one", "two","three", "four")
$reg = [wmiclass]"\\$strComputer\root\default:StdRegprov"
[void]$reg.SetMultiStringValue($HKEY_LOCAL_MACHINE, $strKeyPath, $strValueName, $arrStringValues)
$multiValues = $reg.GetMultiStringValue($HKEY_LOCAL_MACHINE, $strKeyPath, $strValueName)
$multiValues.sValue
Com o WMI, você não pode definir a segurança de acesso em uma chave do Registro. No entanto, o método StdRegProv.CheckAccess compara as configurações de segurança do usuário atual com o descritor de segurança em uma chave do Registro para determinar se o usuário tem uma permissão específica, como KEY_SET_VALUE.