RegCreateEx возвращает 5 отказано в доступе в Windows 7

#windows-7 #registry

#windows-7 #реестр

Вопрос:

У меня есть одна программа, которая использует API RegCreateKeyEx и которая отлично работает на WinXP и Vista.

Программа обычно запускается с повышенными привилегиями. Когда я пытаюсь использовать ту же программу в Windows 7, RegCreateKeyEx API возвращает 5 (доступ запрещен).

Есть идеи, как это решить?

Комментарии:

1. Можете ли вы создать ключ вручную с помощью regedit.exe ? Возможно, это проблема с разрешениями. Кроме того, вы тестировали на той же платформе (32-разрядной или 64-разрядной) для упомянутых вами версий Windows?

2. Не без дополнительной информации. Где вы пытаетесь создать ключ (HKLM, HKCU)? Как вы открываете ключ? Что означает «обычно запущенный»?

Ответ №1:

Эта ошибка возникает, когда вы пытаетесь создать ключ в части реестра, где у вас нет доступа на запись. В Windows 7 это происходит практически везде.

Для повышения совместимости 32-разрядных приложений между XP / 7 рекомендуется создать ключ в 32-разрядном представлении реестра. Измените свой вызов, чтобы включить маску KEY_WOW64_32KEY , чтобы он использовал 32-разрядное представление:

 result = RegCreateKeyEx(HKEY_LOCAL_MACHINE, _T("SOFTWARE\Foo"),
    NULL, NULL, NULL, KEY_ALL_ACCESS | KEY_WOW64_32KEY, NULL, amp;hkey, amp;disposition);
  

Затем сначала создайте ключ в реестре вручную в HKEY_LOCAL_MACHINESOFTWAREWow6432NodeFoo . Измените разрешения и предоставьте себе (или всем) полный контроль.

Теперь вы должны иметь возможность получить доступ к ключу из 32-разрядного приложения.

Комментарии:

1. В Windows 7 это практически везде . Неверно. HKCU является очевидным исключением. И обратите внимание, что UAC был введен в Vista, поэтому ничего важного в этом разделе не изменилось с Vista на 7. Флаги просмотра реестра редко требуются, поскольку перенаправление обычно решает это за вас. Если код запускается из 32-разрядного процесса, перенаправитель позаботится обо всем. Наконец, предположение о том, что решение включает в себя ручное создание ключа и назначение прав, не очень полезно для сайта для программистов. Реальная проблема здесь — безнадежно неточный вопрос, на который не следует отвечать.