Compartir a través de


Obtención de datos del Registro

Puede obtener o modificar datos del Registro mediante la clase StdRegProv de WMI y sus métodos. Al usar la utilidad Regedit para ver y cambiar los valores del Registro en el equipo local, StdRegProv permite usar un script o una aplicación para automatizar estas actividades en el equipo local y en los equipos remotos.

StdRegProv contiene métodos para hacer lo siguiente:

  • Comprobación de los permisos de acceso de un usuario
  • Creación, enumeración y eliminación de claves del Registro
  • Crear, enumerar y eliminar subclaves o valores con nombre
  • Leer, escribir y eliminar valores de datos

Los datos del Registro se organizan mediante subárboles, claves y subclaves anidados en una clave de nivel superior. Los valores de datos reales se denominan entradas o valores con nombre.

Los subárboles incluyen lo siguiente:

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

Por ejemplo, en la entrada del Registro HKEY\SOFTWARE\Microsoft\DirectX\InstalledVersion, el subárbol HKEY es SOFTWARE; las subclaves son Microsoft y DirectX; y la entrada de valor con nombre es InstalledVersion.

Un RegistryKeyChangeEvent se produce cuando se produce un cambio en una clave específica, pero la entrada no identifica cómo cambian los valores ni se desencadenará este evento por debajo de la clave especificada. Para identificar los cambios en cualquier lugar de una estructura de clave jerárquica, use RegistryTreeChangeEvent, que no devuelve valores específicos ni cambios clave que se producen. Para obtener un cambio de valor de entrada específico, use RegistryValueChangeEvent y, a continuación, lea la entrada para obtener un valor de línea base.

StdRegProv solo tiene métodos a los que se puede llamar desde C++ o script, que es diferente de la estructura de clases Win32.

En el ejemplo de código siguiente se muestra cómo usar el método StdRegProv.EnumKey para enumerar todas las subclaves de software de Microsoft en la clave del Registro.

\HKEY_LOCAL_MACHINE SOFTWARE\De 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

Nota:

VBScript ha quedado en desuso. Para obtener más información, consulte la entrada de blog VBScript desuso: Escalas de tiempo y pasos siguientes.


# 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 tiene métodos diferentes para leer los distintos tipos de datos de valor de entrada del Registro. Si la entrada tiene valores desconocidos, puede llamar a StdRegProv.EnumValues para enumerarlos. En la tabla siguiente se muestra la correspondencia entre los métodos StdRegProv y los tipos de datos.

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

 

En la tabla siguiente se enumeran los métodos correspondientes para crear nuevas claves o valores, o cambiar los existentes.

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

 

En el ejemplo siguiente se muestra cómo leer la lista de orígenes del registro de eventos del sistema desde la clave del Registro.

sistema de registro de eventos\HKEY_LOCAL_MACHINE SYSTEM\Current Control Set Services\\\

Tenga en cuenta que los elementos del valor de varias cadenas se tratan como una colección o 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

Nota:

VBScript ha quedado en desuso. Para obtener más información, consulte la entrada de blog VBScript desuso: Escalas de tiempo y pasos siguientes.


# 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

El proveedor del registro se hospeda en LocalService, no en localSystem. Por lo tanto, no es posible obtener información de forma remota desde el subárbol HKEY_CURRENT_USER . Sin embargo, los scripts que se ejecutan en el equipo local todavía pueden acceder a HKEY_CURRENT_USER. Puede establecer el modelo de hospedaje en LocalSystem en un equipo remoto, pero es un riesgo de seguridad porque el registro de la máquina remota es vulnerable al acceso hostil. Para más información, consulte Hospedaje y seguridad del proveedor.

Tareas de WMI: Registro