Форум: "WinAPI";
Текущий архив: 2006.05.28;
Скачать: [xml.tar.bz2];
ВнизHKLM под Windows Vista (Build 5308) Найти похожие ветки
← →
Nostradamus (2006-03-06 03:51) [0]Почему-то под Windows Vista Build 5308 не создаются Ключи в рееестре в HKEY_LOCAL_MACHINE\Software
Не подскажете ли в чём проблема. Может быть для этого нужно иметь какие-то особые права?
Использую TRegistry.
← →
kaZaNoVa © (2006-03-06 13:27) [1]а из Regedit создаются? (вручную)
← →
antonn © (2006-03-06 13:32) [2]Nostradamus (06.03.06 3:51)
Использую TRegistry.
хи-хи-хи
у меня такой же облом был с кряком для 1C :)
← →
Nostradamus (2006-03-06 13:45) [3]> а из Regedit создаются? (вручную)
Да.
Причём скажем VMWare Tools удалось туда записать т.е. это возможно
+Если создать вручную ключ, то програмно добавить в него Value тоже не получается...
← →
ssk © (2006-03-06 13:48) [4]Как известно скоро на смену WindowsXP придёт новая ОС – рабочее название Windows Vista (известная также как Windows Longhorn). ..... Что уже известно о ней?
Одним из главных нововедений является…отсутствие реестра в обычном понимании этого слова. Теперь все настройки и параметры будут храниться в специальном файле, доступ к которому будет строго ограничен.
источник http://people.overclockers.ru/Mihanik/record3
← →
Crash Coredump © (2006-03-06 13:52) [5]ssk © (06.03.06 13:48) [4]
> Одним из главных нововедений является…отсутствие реестра
> в обычном понимании этого слова
Реестр никуда не делся - см. тему.
То, что прав нету - это проблема политики или неумения ей пользоваться
← →
Nostradamus (2006-03-06 13:56) [6]Я тоже думаю, что просто прав нет. Только как их получить?
А реестр есть 100% :)
← →
Crash Coredump © (2006-03-06 14:31) [7]
> Только как их получить?
Войти под учетной записью администратора ?
← →
Nostradamus (2006-03-06 14:48) [8]Я и вхожу под админом, но всё равно моя прога не может создавать ключи в HKEY_LOCAL_MACHINE :(
← →
Crash Coredump © (2006-03-06 15:03) [9]А что говорит GetLastError ?
← →
Nostradamus (2006-03-06 16:10) [10]> А что говорит GetLastError ?
Access is denied
← →
Игорь Шевченко © (2006-03-06 17:52) [11]Nostradamus (06.03.06 14:48) [8]
> Я и вхожу под админом
Ты в этом абсолютно уверен ? И программа работает с теми же правами ?
← →
Eraser © (2006-03-06 18:14) [12]
> Nostradamus (06.03.06 03:51)
возможно недоработака, ведь это бета...
попробуй открыть ветку через RegEdit в вручную поставь ей нужные права.
И заодно скажи нам, какие они там по умолчанию.
← →
Nostradamus (2006-03-06 18:18) [13]2 Игорь Шевченко
>> Я и вхожу под админом
>Ты в этом абсолютно уверен ? И программа работает с теми же правами ?
То, что вхожу под админом - уверен. Какие права у программы - точно не знаю. (я всегда думал что те же, что и у самого юзера)
2 Eraser
> возможно недоработака, ведь это бета...
VMWare Tools удалось туда писать - значит НЕ недоработка (точнее недоработка, только моя)
← →
Nostradamus (2006-03-06 18:34) [14]>попробуй открыть ветку через RegEdit в вручную поставь ей нужные права.
>И заодно скажи нам, какие они там по умолчанию.
по умолчанию:
HKEY_LOCAL_MACHINE
Everyone: Read
RESTRICTED: Read
SYSTEM: Full Control, Read
Administrators : Full Control, Read
HKLM\Software
CREATOR OWNER: Special Permissions
SYSTEM: Full Control, Read
Administrators : Full Control, Read
Users : Read
Изменение прав вручную - не помогло
(поставил Full Control ВСЕМ в HKLM и HKLM\Software)
← →
Nostradamus (2006-03-06 18:48) [15]Вот, что я нашёл в MSDN:
...
Securable objects, like files and registry keys, have security descriptors that define the integrity level, or level of privilege required for write access to the object. This integrity level is defined with a new mandatory access control entry (ACE) in the System access control list (SACL). The new mandatory ACE is called a mandatory label. Objects without mandatory labels have an implied default integrity level of Medium.
*
Processes have a process integrity level defined in the security access token. In Protected Mode, Internet Explorer has a low process integrity level. Applications run from the Start menu have a medium integrity level. Applications that require administrator permissions run with high integrity level.
*
Low integrity processes cannont gain write access to objects at a higher integrity levels, even if the user"s SID is granted write access in the discretionary access control list (DACL). Integrity level checks are performed before user access permission checks.
All files and registry keys on Windows Vista have a default integrity level of Medium. A Low integrity process, like Internet Explorer in Protected Mode, will receive access denied errors when it tries to modify existing files.
...
High:
Administrative (Process can install files to the Program Files folder and write to sensitive registry areas like HKEY_LOCAL_MACHINE.)
Medium:
User (Process can create and modify files in the user"s Documents folder and write to user-specific areas of the registry, such as HKEY_CURRENT_USER.)
Low:
Untrusted (Process can only write to low integrity locations, such as the Temporary Internet Files\Low folder or the HKEY_CURRENT_USER\Software\LowRegistry key)
Только, что с этим делать???
← →
Eraser © (2006-03-06 21:09) [16]
> Nostradamus (06.03.06 18:48) [15]
> Только, что с этим делать???
да в том то и дело что ничего!
по умолчанию у админа доступ должен быть.
← →
Nostradamus (2006-03-06 21:54) [17]
> Eraser © (06.03.06 21:09) [16]
>
>
> > Nostradamus (06.03.06 18:48) [15]
>
>
> > Только, что с этим делать???
>
> да в том то и дело что ничего!
> по умолчанию у админа доступ должен быть.
>
Я имею ввиду как дать возможность программе писать в HKEY_LOCAL_MACHINE???
← →
Eraser © (2006-03-06 21:58) [18]
> Nostradamus (06.03.06 21:54) [17]
если программа запущена от имени администратора или текущий поток имеет права администратора, то такая возможность есть итак... по крайней мере должна быть.
← →
antonn © (2006-03-06 22:10) [19]а если создать файл *reg и его запустить?
т.е. не самому лезть в реестр, а дать виндовозу поработать?
← →
Nostradamus (2006-03-06 22:25) [20]
> Eraser © (06.03.06 21:58) [18]
>
>
> > Nostradamus (06.03.06 21:54) [17]
>
> если программа запущена от имени администратора или текущий
> поток имеет права администратора, то такая возможность есть
> итак... по крайней мере должна быть.
>
Я же говорю, что я запускаю программу от имени админа и всё равно не пишет в реестр...
Может быть это нужно как-то установить програмно?
← →
Игорь Шевченко © (2006-03-06 22:40) [21]
> Я же говорю, что я запускаю программу от имени админа
Запусти Process Explorer с http://www.sysinternals.com и посмотри, с какими правами у тебя реально выполняется программа.
Если с правами администратора - ищи ошибку в программе.
← →
n0name (2006-03-07 06:56) [22]открывай клюс с параметрами REG_READ_CONTROL + REG_WRITE_CONTROL.
Только я к сожалению не помню предоставляется такая возможность Registry.
← →
Nostradamus (2006-03-07 16:41) [23]
> Игорь Шевченко © (06.03.06 22:40) [21]
>
>
> > Я же говорю, что я запускаю программу от имени админа
>
>
> Запусти Process Explorer с http://www.sysinternals.com и
> посмотри, с какими правами у тебя реально выполняется программа.
>
> Если с правами администратора - ищи ошибку в программе.
>
Посмотрел: программа запускается с правами юзера в группе Administrators.
А какая тут может быть ошибка. Ума не приложу. Может быть Вы можете подсказать.var
Reg : TRegistry;
KeyGood : Boolean;
begin
Reg := TRegistry.Create;
try
//Reg.Access := KEY_READ OR KEY_WRITE; //Не помогает
Reg.RootKey := HKEY_LOCAL_MACHINE;
KeyGood := Reg.OpenKey("Software\Test\ProgName\", True); //Тут уже Access denied
if KeyGood then begin
Reg.WriteBool("allowChange", allowChange);
...
end;
finally
Reg.Free;
end;
Работает под всеми виндами кроме Vista.
← →
fellix (2006-03-07 16:48) [24]А как насчет SeBackupPrivilege и SeRestorePrivilege?
← →
Nostradamus (2006-03-08 19:08) [25]SeBackupPrivilege - Disabled
SeRestorePrivilege - Disabled
← →
fellix (2006-03-08 20:50) [26]Ну так надо получить.
MSDN:
SeBackupPrivilege - This privilege is required by the RegSaveKey and RegSaveKeyEx functions.
SeRestorePrivilege - This privilege is required by the RegLoadKey function.
← →
Nostradamus (2006-03-09 00:22) [27]Спасибо, попробую
← →
Nostradamus (2006-03-09 03:02) [28]Пробую вот так, всё равно не работает - Access Denied :(
var
hToken : Cardinal;
tp : _TOKEN_PRIVILEGES;
rs : Cardinal;
begin
OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, hToken);
LookupPrivilegeValue(nil, "SeBackupPrivilege", tp.Privileges[0].LUID);
AdjustTokenPrivileges(hToken, False, tp, 0, nil, rs);
LookupPrivilegeValue(nil, "SeRestorePrivilege", tp.Privileges[0].LUID);
AdjustTokenPrivileges(hToken, False, tp, 0, nil, rs);
end;
← →
n0name (2006-03-09 08:36) [29]а закрыть?
← →
DelphiN! © (2006-03-09 09:48) [30]Получается под Виста большинство имеющихся программ работать не будут, жаль ...
← →
DelphiN! © (2006-03-09 09:48) [31]Хотя может еще и пофиксят
← →
Nostradamus (2006-03-09 13:53) [32]
> n0name (09.03.06 08:36) [29]
>
> а закрыть?
>
Что закрыть?
Я так понимаю, что больше ни у кого идей нет :(
← →
Crash Coredump © (2006-03-09 14:22) [33]Nostradamus (09.03.06 13:53) [32]
Скорее, больше ни у кого нет Vista 5308
← →
fellix (2006-03-09 14:50) [34]> Nostradamus
В [28] что-то неправильно. Проверьте так:
var hTkn: THandle;
newPriv,
oldPriv: _TOKEN_PRIVILEGES;
retLen: DWORD;
qryPriv: _PRIVILEGE_SET;
Value: BOOL;
begin
if OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, hTkn)
then begin
with newPriv do begin
PrivilegeCount := 1;
if LookupPrivilegeValue(nil, "SeBackupPrivilege", Privileges[0].Luid)
then begin
Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
if AdjustTokenPrivileges(hTkn, FALSE, newPriv, SizeOf(newPriv), oldPriv, retLen)
then MessageBox(0, "Adjusted", "", 0);
// else error
end; // else error
end; // else error
with qryPriv do begin
PrivilegeCount := 1;
Control := 0;
if LookupPrivilegeValue(nil, "SeBackupPrivilege", Privilege[0].Luid)
then begin
if PrivilegeCheck(hTkn, qryPriv, Value)
then if Value
then MessageBox(0, "Checked OK", "", 0)
else MessageBox(0, "Checked NO", "", 0);
// else error
end; // else error
end; // else error
CloseHandle(hTkn);
end; // else error
end;
Второй "with...begin" - проверка, что привилегия таки получена (из опыта: предоставляется не всегда).
← →
Nostradamus (2006-03-09 14:50) [35]Ну что ж, будем ждать пока появится :)
← →
Nostradamus (2006-03-09 15:01) [36]> fellix (09.03.06 14:50) [34]
под XP - CHECKED OK
под Vista - CHECKED NO
← →
fellix (2006-03-09 15:23) [37]
> Nostradamus (09.03.06 15:01) [36]
Тогда давайте экспериментировать.
1. Работаем под админом.
2. Убеждаемся, что под ХР "программа записи в реестр" работает правильно.
3. Под Вистой в Administrative Tools -> Local Security Policy -> Local Policies -> User Rights Assignment (или чего-нить подобное) прописываем админу все привилегии.
4. Для надежности перегружаемся.
5. Проверяем привилегии через код из [34]; запускаем "программу записи в реестр"; смотрим результаты и т.п.
← →
Nostradamus (2006-03-09 15:29) [38]> fellix (09.03.06 15:23) [37]
С удовольствием поэксеперементирую.
П.С. Большое спасибо за помощь
← →
Nostradamus (2006-03-09 16:26) [39]Ха, получилось.
Нужно было в
Administrative Tools -> Security Configuration Manager -> Local Policies -> Security Options
поставить опцию:
User Account Control: Run all users, including administrators, as standart users
в
Disabled
Ещё раз, всем спасибо за помощь, особенно fellix
← →
fellix (2006-03-09 16:56) [40]Увы, в общем случае, это - не решение.
Ну не заставлять же каждого покупателя программы снижать глобальную security. Стоило бы разобраться, как получает права regedit. Возможно в Висте можно прописывать права отдельным программам...
← →
Eraser © (2006-03-09 18:38) [41]
> fellix (09.03.06 16:56) [40]
исправят... imho
на то она и бета.
← →
Crash Coredump © (2006-03-09 18:45) [42]
> Стоило бы разобраться, как получает права regedit.
Рискну предположить, что по цифровой подписи.
← →
Nostradamus (2006-03-09 23:28) [43]
> fellix (09.03.06 16:56) [40]
>
> Увы, в общем случае, это - не решение.
> Ну не заставлять же каждого покупателя программы снижать
> глобальную security. Стоило бы разобраться, как получает
> права regedit. Возможно в Висте можно прописывать права
> отдельным программам...
>
Обязательно постараюсь узнать. Если удастся что-то выяснить, то напишу в форум...
← →
Registry rights tester (2006-03-09 23:51) [44]Вот такой код работает под Vista 5270 из-под встроенной учетной записи администратора без дополнительных ухищрений:
procedure TForm1.Button1Click(Sender: TObject);
begin
with TRegistry.Create(KEY_READ or KEY_WRITE) do
try
RootKey := HKEY_LOCAL_MACHINE;
if OpenKey("\Software\RightsTest", true) then
WriteString ("CanIWrite", "Yes");
finally
Free;
end;
end;
Страницы: 1 2 вся ветка
Форум: "WinAPI";
Текущий архив: 2006.05.28;
Скачать: [xml.tar.bz2];
Память: 0.56 MB
Время: 0.013 c