Этот вопрос не зависит от используемого языка программирования.
Протестировано в Windows 7 SP1 и Windows 10 версии 1803.
Симптомы
RegSaveKey () завершается с ошибкой с кодом 5 ( доступ запрещен ), если ключ для сохранения является HKEY_LOCAL_MACHINE
.
Эта ошибка не возникает, если указан подраздел, например HKEY_LOCAL_MACHINE\SYSTEM
.
Эта ошибка также не возникает, если ключ HKEY_CURRENT_USER
.
Первый образец
Здесь я использую AutoIt для быстрой записи образца кода, которые воспроизводят ошибку.Я также скомпилировал пример кода в .EXE, чтобы люди могли легко разобраться в проблеме.
Второй пример
REG.EXE , который является встроенной в WindowsУ инструмента , написанного с использованием Visual C ++ (поэтому теги включают C), есть точно такая же проблема, как упомянуто выше.Это неудивительно, поскольку, согласно моему исследованию, команда REG.EXE SAVE
фактически использует недокументированную NtSaveKey () .Кстати, RegSaveKey () внутренне выполняет вызов NtSaveKey () .
REG.EXE SAVE "HKLM" "HKLM.hiv" /Y
Вышеприведенная команда завершается с ошибкой «Доступ запрещен»,Обратите внимание, что я запускаю команду как Администратор .
Вопрос
В чем причина этой ошибки?Есть ли способ заставить RegSaveKey () работать на HKEY_LOCAL_MACHINE
(без указания подключа)?
Обновить
Мой дальнейший тест показывает, что regedit.exe имеет ту же проблему, что и упомянутая выше.
- Не удается экспортировать
HKEY_LOCAL_MACHINE
в .HIV
файл;однако экспорт в файл .REG
завершается успешно. - Экспорт
HKEY_LOCAL_MACHINE\<subkey>
в файл .HIV
завершается успешно. - Экспорт
HKEY_CURRENT_USER
в файл .HIV
завершается успешно. - Экспорт
HKEY_CURRENT_USER\<subkey>
в файл .HIV
выполнен успешно.