HKEY_CLASSES_ROOT - ошибка 5 - ERROR_ACCESS_DENIED
От: пффф  
Дата: 06.05.24 21:57
Оценка:
Привет!

По идее, пользователю же можно туда писать-читать?

Создаю ключ в реестре так:
  regCreateKeyHelper
inline
HKEY regCreateKeyHelper(HKEY hKeyRoot, const std::wstring &path, REGSAM samDesired)
{
    if (isWindows32OnWindows64())
    {
        samDesired |= KEY_WOW64_64KEY;
    }
    
    HKEY hKeyRes = 0;
    DWORD dwDisposition = 0;

    LSTATUS status = RegCreateKeyExW( hKeyRoot
                                    , path.c_str()
                                    , 0 // reserved
                                    , 0 // lpClass - The user-defined class type of this key. This parameter may be ignored. This parameter can be NULL.
                                    , REG_OPTION_NON_VOLATILE // default, 0
                                    , samDesired
                                    , 0 // lpSecurityAttributes
                                    , &hKeyRes
                                    , &dwDisposition
                                    );
    if (status!=ERROR_SUCCESS)
    {
        return 0;
    }

    return hKeyRes;
}


Задаю переменную:
  registerShellExtentionHandlerApplication
inline
bool registerShellExtentionHandlerApplication(const std::wstring &appNameId, const std::wstring &shellVerb, const std::wstring &appCommand)
{

    // Компьютер\HKEY_CLASSES_ROOT\gg_app
    //     shell
    //       open
    //         command
    //           default value: "gg.exe" "%1"
    //  
    // HKEY_CLASSES_ROOT\.gg
    //     default value gg_app
    //  
    // The nameless key is the default one - https://learn.microsoft.com/en-us/dotnet/api/microsoft.win32.registry.setvalue?view=net-8.0&redirectedfrom=MSDN#overloads

    std::wstring regPath = appNameId;
    regPath.append(L"\\shell");
    regPath.append(L"\\");
    regPath.append(shellVerb);
    regPath.append(L"\\command");

    HKEY hKey = regCreateKeyHelper(HKEY_CLASSES_ROOT, regPath, KEY_READ|KEY_WRITE); // !!! Тут возвращает 0

    if (!hKey)
        return false;

    bool res = regSetValue(hKey, L"" /* varName */ , appCommand);

    RegCloseKey(hKey);

    return res;
}


Использую:
    bool regRes = registerShellExtentionHandlerApplication(L"gg-app", L"open", L"gg %1");


Правда, ломается до установки, на этапе regCreateKeyHelper

Что не так делаю?
Re: HKEY_CLASSES_ROOT - ошибка 5 - ERROR_ACCESS_DENIED
От: reversecode google
Дата: 06.05.24 22:15
Оценка:
марти убери KEY_WRITE
и все поймешь

вообще прими себе за привычку
постить на форуме
только после того как не менее 10 раз спросил у гугла
Re[2]: HKEY_CLASSES_ROOT - ошибка 5 - ERROR_ACCESS_DENIED
От: пффф  
Дата: 06.05.24 22:22
Оценка:
Здравствуйте, reversecode, Вы писали:

R>марти убери KEY_WRITE

R>и все поймешь

Вы меня с кем-то путаете.

KEY_WRITE убирать не имеет смысла, потому что я хочу туда писать.
KEY_READ убирал, не помогает


R>вообще прими себе за привычку

R>постить на форуме
R>только после того как не менее 10 раз спросил у гугла

Вообще спросил, и попробовал много рецептов.

По существу что-нибудь скажете, или будете потрясывать пенисом своей крутизны?
Re[3]: HKEY_CLASSES_ROOT - ошибка 5 - ERROR_ACCESS_DENIED
От: reversecode google
Дата: 06.05.24 22:29
Оценка:
П>KEY_WRITE убирать не имеет смысла, потому что я хочу туда писать.

есть смысл убрать что бы увидеть что код работает
и для каких то ваших ХОЧУ нужны админские привилегии или разрешение UAC
это написано в первой ссылке гугла

все же спрячьте свою пипсиську
и купите книгу, гугл для маленьких
там учат не только кнопки нажимать но читать что пишут по ссылкам
Re[4]: HKEY_CLASSES_ROOT - ошибка 5 - ERROR_ACCESS_DENIED
От: пффф  
Дата: 07.05.24 00:18
Оценка: :)
Здравствуйте, reversecode, Вы писали:


П>>KEY_WRITE убирать не имеет смысла, потому что я хочу туда писать.


R>есть смысл убрать что бы увидеть что код работает

R>и для каких то ваших ХОЧУ нужны админские привилегии или разрешение UAC
R>это написано в первой ссылке гугла

R>все же спрячьте свою пипсиську

R>и купите книгу, гугл для маленьких
R>там учат не только кнопки нажимать но читать что пишут по ссылкам


Если бы вы что-то знали, или хотя бы умели пользоваться гуглом, то сразу бы сказали, что надо использовать не HKEY_CLASSES_ROOT, а HKEY_CURRENT_USER, и путь от корня должен начинаться с "Software\Classes".

Но поскольку вы вздорный профан, не умеющий пользоваться гуглом, то я не вижу смысла продолжать с вами общение.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.