Получение данных реестра
Вы можете получить или изменить данные реестра с помощью класса WMI StdRegProv и его методов. При использовании служебной программы Regedit для просмотра и изменения значений реестра на локальном компьютере StdRegProv позволяет использовать скрипт или приложение для автоматизации таких действий на локальном компьютере и удаленных компьютерах.
StdRegProv содержит методы для выполнения следующих действий:
- Проверка разрешений доступа для пользователя
- Создание, перечисление и удаление разделов реестра
- Создание, перечисление и удаление вложенных ключей или именованных значений
- Чтение, запись и удаление значений данных
Данные реестра организованы поддерями, ключами и вложенными ключами, вложенными под ключом верхнего уровня. Фактические значения данных называются записями или именованными значениями.
Ниже приведены поддеревы:
- HKEY_CLASSES_ROOT (сокращено как HKCR)
- HKEY_CURRENT_USER (HKCU)
- HKEY_LOCAL_MACHINE (HKLM)
- HKEY_USERS
- HKEY_CURRENT_CONFIG
Например, в записи реестра HKEY\SOFTWARE\Microsoft\DirectX\InstalledVersion поддерев HKEY — SOFTWARE, подключи — Microsoft и DirectX, а именованное значение — InstalledVersion.
RegistryKeyChangeEvent возникает при изменении определенного ключа, но запись не определяет, как изменяются значения, и это событие не активируется изменениями под указанным ключом. Чтобы определить изменения в иерархической структуре ключей, используйте RegistryTreeChangeEvent, который не возвращает определенные значения или изменения ключей, которые происходят. Чтобы получить определенное изменение значения входа, используйте RegistryValueChangeEvent, а затем прочитайте запись, чтобы получить базовое значение.
StdRegProv имеет только методы, которые можно вызывать из C++ или скрипта, которые отличаются от структуры классов Win32.
В следующем примере кода показано, как использовать метод StdRegProv.EnumKey для перечисления всех подразделов программного обеспечения Майкрософт в разделе реестра.
HKEY_LOCAL_MACHINE ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ\Майкрософт\
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
Примечание.
VBScript устарел. Дополнительные сведения см. в записи блога о прекращении использования VBScript: временная шкала и дальнейшие действия.
# 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 имеет различные методы для чтения различных типов данных значений записи реестра. Если запись имеет неизвестные значения, можно вызвать StdRegProv.EnumValues для их перечисления. В следующей таблице перечислены соответствия между методами StdRegProv и типами данных.
Способ | Тип данных |
---|---|
GetBinaryValue | REG_BINARY |
GetDWORDValue | REG_DWORD |
GetExpandedStringValue | REG_EXPAND_SZ |
GetMultiStringValue | REG_MULTI_SZ |
GetStringValue | REG_SZ |
В следующей таблице перечислены соответствующие методы для создания новых ключей или значений или изменения существующих.
Способ | Тип данных |
---|---|
SetBinaryValue | REG_BINARY |
SetDWORDValue | REG_DWORD |
SetExpandedStringValue | REG_EXPAND_SZ |
SetMultiStringValue | REG_MULTI_SZ |
SetStringValue | REG_SZ |
В следующем примере показано, как считывать список источников для системного журнала событий из раздела реестра.
\система событий\HKEY_LOCAL_MACHINE SYSTEM\Current Control Set Services\\
Обратите внимание, что элементы в многостроонном значении рассматриваются как коллекция или массив.
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
Примечание.
VBScript устарел. Дополнительные сведения см. в записи блога о прекращении использования VBScript: временная шкала и дальнейшие действия.
# 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
Поставщик реестра размещается в LocalService, а не LocalSystem. Поэтому удаленное получение информации из поддеревого HKEY_CURRENT_USER невозможно. Однако скрипты, выполняемые на локальном компьютере, по-прежнему могут получить доступ к HKEY_CURRENT_USER. Модель размещения можно задать на локальном компьютере, но это риск безопасности, так как реестр на удаленном компьютере уязвим для враждебного доступа. Дополнительные сведения см. в разделе "Размещение и безопасность поставщика".
См. также