2017-02-11 39 views
-2

У меня возникли проблемы с открытием раздела реестра с помощью функции 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).

+1

Вы проверили в Regedit, что этот ключ на самом деле существует? В моей системе Windows 10 такого ключа нет ни под обычным реестром, ни с помощью перенаправления WOW6432Node. – MrEricSir

+0

@MrEricSir это ключ реестра, указанный в документации '' AddFontResource() ') (https://msdn.microsoft.com/en-us/library/windows/desktop/dd183326.aspx), а также [Установка шрифтов и Удаление] (https://msdn.microsoft.com/en-us/library/dd144833.aspx). Он предназначен для обозначения шрифтов, которые установлены за пределами папки '% windir% \ fonts'. Если у вас нет таких шрифтов, возможно, ключ никогда не будет создан. –

+2

Код ошибки ясен. Файл не найден. Этот путь не существует. Какое еще объяснение вам нужно? –

ответ

-2

Ключ псевдо-ключа HKEY_LOCAL_MACHINE указывает на ключ с именем \Registry\Machine, который служит одной из точек крепления для ульев реестра. Я сомневаюсь, что вы можете открыть этот ключ или перечислить его подразделы с помощью стандартного API Windows, такого как RegOpenKeyEx. Может быть, родной API (NtOpenKey) будет работать.

Вы можете создать подраздел под ключом HKEY_LOCAL_MACHINE, вызвав функцию RegLoadKey. Если вам нужно перечислить такие подразделы, вы можете посмотреть значения под HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\hivelist; имена значений указывают вам путь к реестру - те, которые начинаются с \Registry\Machine, являются подразделами HKEY_LOCAL_MACHINE.

HKEY_USERS, вероятно, показывает то же поведение.

 Смежные вопросы

  • Нет связанных вопросов^_^