RegOpenKeyEx возвращает код ошибки 5 (ERROR_ACCESS_DENIED)

У меня возникают проблемы при открытии раздела реестра с помощью функции RegOpenKeyEx. Конкретная программа, которую я пишу, устанавливает шрифты на компьютер, и они должны быть добавлены в реестр, чтобы оставаться установленными после перезагрузки. Я новичок в использовании реестра, поэтому я много искал, но столкнулся с проблемой. Вот пример, который показывает аргументы, которые я посылаю RegOpenKeyEx:

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);

Я не знаю, как поступить, поэтому любая помощь будет принята с благодарностью.

РЕДАКТИРОВАТЬ: я подтвердил с regedit, что ключ существует. Похоже, что если второй аргумент RegOpenKeyEx не равен NULL, он возвращает код ошибки 2.

РЕДАКТИРОВАТЬ 2: Я пробовал несколько решений, в том числе с помощью функции TEXT () на подразделе и изменения прав доступа на KEY_SET_VALUE, но я все еще получаю ту же ошибку. Я также пытался использовать RegCreateKeyEx. Странно, я все еще получаю код ошибки 2, хотя иногда я получаю код ошибки 122 (ERROR_INSUFFICENT_BUFFER).

РЕДАКТИРОВАТЬ 3: Я изменил обработку ошибок, чтобы она напрямую использовала возвращаемое значение функции вместо GetLastError (). Теперь я получаю код ошибки 5 (ERROR_ACCESS_DENIED).

-2

Решение

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

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

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

-2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]