Obtendo dados do Registro

Você pode obter ou modificar dados do Registro usando a classe WMI StdRegProv e seus métodos. Ao usar o utilitário Regedit para exibir e alterar valores do Registro no computador local, o StdRegProv permite que você use um script ou aplicativo para automatizar essas atividades no computador local e em computadores remotos.

StdRegProv contém métodos para fazer o seguinte:

  • Verificar as permissões de acesso de um usuário
  • Criar, enumerar e excluir chaves do Registro
  • Criar, enumerar e excluir subchaves ou valores nomeados
  • Ler, gravar e excluir valores de dados

Os dados do Registro são organizados por subárvores, chaves e subchaves aninhadas sob uma chave de nível superior. Os valores de dados reais são chamados de entradas ou valores nomeados.

As subárvores incluem o seguinte:

  • HKEY_CLASSES_ROOT (abreviado como HKCR)
  • HKEY_CURRENT_USER (HKCU)
  • HKEY_LOCAL_MACHINE (HKLM)
  • HKEY_USERS
  • HKEY_CURRENT_CONFIG

Por exemplo, na entrada do Registro HKEY\SOFTWARE\Microsoft\DirectX\InstalledVersion, a subárvore HKEY é SOFTWARE, as subchaves são Microsoft e DirectX e a entrada de valor nomeado é InstalledVersion.

Um RegistryKeyChangeEvent ocorre quando ocorre uma alteração em uma chave específica, mas a entrada não identifica como os valores são alterados nem esse evento será disparado por alterações abaixo da chave especificada. Para identificar alterações em qualquer lugar em uma estrutura de chave hierárquica, use o RegistryTreeChangeEvent, que não retorna valores específicos ou alterações de chave que ocorrem. Para obter uma alteração de valor de entrada específica, use o RegistryValueChangeEvent e, em seguida, leia a entrada para obter um valor de linha de base.

StdRegProv só tem métodos que podem ser chamados de C++ ou script, que é diferente da estrutura de classe Win32.

O exemplo de código a seguir mostra como usar o StdRegProv.EnumKey método para listar todas as subchaves de software da Microsoft sob a chave do Registro.

HKEY_LOCAL_MACHINE SOFTWARE Microsoft\\

const HKEY_LOCAL_MACHINE = &H80000002
strComputer = "."

Set objReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\default:StdRegProv")

strKeyPath = "SOFTWARE\Microsoft"
objReg.EnumKey HKEY_LOCAL_MACHINE, strKeyPath, arrSubKeys

For Each subkey In arrSubKeys
Wscript.Echo subkey
    
Next

Observação

O VBScript foi preterido. Para obter detalhes, consulte a postagem do blog VBScript deprecation: cronogramas e próximas etapas.


# The signature for EnumKey method of StdRegProv class:
#
# uint32 EnumKey(
#  [in]  uint32 hDefKey = HKEY_LOCAL_MACHINE,
#  [in]  string sSubKeyName,
#  [out] string sNames[]
# );

$arguments = @{
    hDefKey = [uint32]2147483650 # HKEY_LOCAL_MACHINE
    sSubKeyName = 'SOFTWARE\Microsoft'
}

$subkeys = Invoke-CimMethod -ClassName StdRegProv -MethodName EnumKey -Arguments $arguments
subkeys.sNames

StdRegProv tem diferentes métodos para ler os vários tipos de dados de valor de entrada do Registro. Se a entrada tiver valores desconhecidos, você poderá chamar StdRegProv.EnumValues para listá-los. A tabela a seguir lista a correspondência entre os métodos StdRegProv e os tipos de dados.

Método Tipo de Dados
GetBinaryValue REG_BINARY
GetDWORDValue REG_DWORD
GetExpandedStringValue REG_EXPAND_SZ
GetMultiStringValue REG_MULTI_SZ
GetStringValue REG_SZ

 

A tabela a seguir lista os métodos correspondentes para criar novas chaves ou valores ou alterar os existentes.

Método Tipo de Dados
SetBinaryValue REG_BINARY
SetDWORDValue REG_DWORD
SetExpandedStringValue REG_EXPAND_SZ
SetMultiStringValue REG_MULTI_SZ
SetStringValue REG_SZ

 

O exemplo a seguir mostra como ler a lista de fontes para o log de eventos do sistema a partir da chave do Registro.

\HKEY_LOCAL_MACHINE SYSTEM\Sistema de Log de\Eventos\de Conjunto\de Controle Atual

Observe que os itens no valor de cadeia de caracteres múltipla são tratados como uma coleção ou matriz.

const HKEY_LOCAL_MACHINE = &H80000002
strComputer = "."

Set objReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\default:StdRegProv")

strKeyPath = "SYSTEM\CurrentControlSet\Services\Eventlog\System"
objReg.EnumKey HKEY_LOCAL_MACHINE, strKeyPath, arrSubKeys

For Each subkey In arrSubKeys
Wscript.Echo subkey
    
Next

Observação

O VBScript foi preterido. Para obter detalhes, consulte a postagem do blog VBScript deprecation: cronogramas e próximas etapas.


# The signature for EnumKey method of StdRegProv class:
#
# uint32 EnumKey(
#  [in]  uint32 hDefKey = HKEY_LOCAL_MACHINE,
#  [in]  string sSubKeyName,
#  [out] string sNames[]
# );

$arguments = @{
    hDefKey = [uint32]2147483650 # HKEY_LOCAL_MACHINE
    sSubKeyName = 'SYSTEM\CurrentControlSet\Services\Eventlog\System'
}

$subkeys = Invoke-CimMethod -ClassName StdRegProv -MethodName EnumKey -Arguments $arguments
subkeys.sNames

O provedor do Registro está hospedado em LocalService — não no LocalSystem. Portanto, obter informações remotamente da HKEY_CURRENT_USER da subárvore não é possível. No entanto, os scripts executados no computador local ainda podem acessar HKEY_CURRENT_USER. Você pode definir o modelo de hospedagem como LocalSystem em uma máquina remota, mas isso é um risco de segurança porque o registro na máquina remota é vulnerável a acesso hostil. Para obter mais informações, consulte Hospedagem e segurança do provedor.

Tarefas WMI: Registro