У меня возникли проблемы с открытием раздела реестра с помощью функции RegOpenKeyEx. Специальная программа, которую я пишу, устанавливает шрифты на компьютер, и их необходимо добавить в реестр, чтобы они оставались установленными после перезагрузки. Я новичок в использовании реестра, поэтому я много искал, но у меня возникла проблема. Вот пример, который показывает аргументы я посылаю RegOpenKeyEx:RegOpenKeyEx возвращает код ошибки 5 (ERROR_ACCESS_DENIED)
int main() {
HKEY key;
long code = RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Fonts", 0, KEY_ALL_ACCESS, &key);
if(code != ERROR_SUCCESS) {
std::cout << code << std::endl;
return 1;
}
RegCloseKey(key);
return 0;
}
Функция возвращает 1 (ERROR_INVALID_FUNCTION). Однако, следующий делает работу, и возвращает 0:
HKEY key;
RegOpenKeyEx(HKEY_LOCAL_MACHINE, NULL, 0, KEY_ALL_ACCESS, &key);
Я не знаю, как поступить, так что любая помощь будет принята с благодарностью.
EDIT: Я подтвердил с помощью regedit, что ключ существует. Похоже, что если второй аргумент RegOpenKeyEx - это что-то иное, чем NULL, он возвращает код ошибки 2.
EDIT 2: Я пробовал несколько решений, включая использование функции TEXT() в подразделе и изменение прав доступа на KEY_SET_VALUE, но я все равно получаю ту же ошибку. Я также попытался использовать RegCreateKeyEx. Странно, я все еще получаю код ошибки 2, хотя иногда я получаю код ошибки 122 (ERROR_INSUFFICENT_BUFFER).
EDIT 3: Я изменил обработку ошибок, поэтому он напрямую использует возвращаемое значение функции вместо GetLastError(). Теперь я получаю код ошибки 5 (ERROR_ACCESS_DENIED).
Вы проверили в Regedit, что этот ключ на самом деле существует? В моей системе Windows 10 такого ключа нет ни под обычным реестром, ни с помощью перенаправления WOW6432Node. – MrEricSir
@MrEricSir это ключ реестра, указанный в документации '' AddFontResource() ') (https://msdn.microsoft.com/en-us/library/windows/desktop/dd183326.aspx), а также [Установка шрифтов и Удаление] (https://msdn.microsoft.com/en-us/library/dd144833.aspx). Он предназначен для обозначения шрифтов, которые установлены за пределами папки '% windir% \ fonts'. Если у вас нет таких шрифтов, возможно, ключ никогда не будет создан. –
Код ошибки ясен. Файл не найден. Этот путь не существует. Какое еще объяснение вам нужно? –