Доброго всем!
Код:
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fwdreason, LPVOID lpvReserved)
{
HKEY LocalServer = 0;
DWORD Status = RegOpenKeyEx(HKEY_CURRENT_USER, "Software", KEY_QUERY_VALUE, 0, &LocalServer);
...
}
По итогам выполнения — Status = 5 (отказано в доступе).
Пишу на С++ Builder 5 SP1. Код помещен в DllMain исключительно для примера. Он не работает при вызове из любой функции dll. Так же он не работает при вызове из другого проекта (exe, работающий с этой dll).
ЕСТЕСТВЕННО, все права на ключик есть (я локальный админ на машине). Тут же рядом пускаю Delphi, пишу TRegistry.Create, OpenKey(...) — все отлично проходит... Причем, как следует из кода TRegistry — с доступом REG_ALL_ACCESS. regedit тоже отлично все открывает.
Что же я не так делаю в билдере?
Здравствуйте, Serg Phantom, Вы писали:
SP>Доброго всем!
SP>Код:
SP>SP>BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fwdreason, LPVOID lpvReserved)
SP>{
SP> HKEY LocalServer = 0;
SP> DWORD Status = RegOpenKeyEx(HKEY_CURRENT_USER, "Software", KEY_QUERY_VALUE, 0, &LocalServer);
SP> ...
SP>}
SP>
...
SP>Что же я не так делаю в билдере?
Смотрим прототип функции RegOpenKeyEx:
LONG RegOpenKeyEx(
HKEY hKey,
LPCTSTR lpSubKey,
DWORD ulOptions,
REGSAM samDesired,
PHKEY phkResult
);
Видим, что у вас в коде перепутаны параметры ulOptions и samDesired. Думаю, что вот так все будет работать:
DWORD Status = RegOpenKeyEx(HKEY_CURRENT_USER, "Software", 0, KEY_QUERY_VALUE, &LocalServer);
Здравствуйте, Lonely Dog, Вы писали:
LD>Видим, что у вас в коде перепутаны параметры ulOptions и samDesired. Думаю, что вот так все будет работать:
ЭТО Ж НАДО ТАК ОБЛАЖАТЬСЯ!!! Спасибо огромное!!!
Глаз замылился... Пора, видимо, отвлечься