Compartilhar via


Obtendo dados de 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 em 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 leia a entrada para obter um valor de linha de base.

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

O exemplo de código a seguir mostra como usar o método StdRegProv.EnumKey para listar todas as subchaves de software da Microsoft na 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 no blog Substituição do VBScript: linhas do tempo 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 métodos diferentes 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
ObterDWORDValue 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
ValorBinário REG_BINARY
ConjuntoDWORDValue REG_DWORD
SetExpandedStringValue REG_EXPAND_SZ
ValorConjuntoMultiString REG_MULTI_SZ
Valor da Cadeia de Caracteres REG_SZ

 

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

\HKEY_LOCAL_MACHINE SISTEMA\de controle atual Conjunto de\serviços\Sistema de registro de eventos\

Observe que os itens no valor de várias cadeias de caracteres 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 no blog Substituição do VBScript: linhas do tempo 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 de registro é hospedado em LocalService, não no LocalSystem. Portanto, não é possível obter informações remotamente do HKEY_CURRENT_USER de subárvore. No entanto, os scripts executados no computador local ainda podem acessar HKEY_CURRENT_USER. Você pode definir o modelo de hospedagem como LocalSystem em um computador remoto, mas isso é um risco de segurança porque o registro no computador remoto é vulnerável a acesso hostil. Para obter mais informações, consulte Hospedagem e segurança do provedor.

Tarefas WMI: Registro