Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

HKLM под Windows Vista (Build 5308)


Страницы:   1 2 3

Nostradamus ©   (2006-03-06 03:51:00) 

Почему-то под Windows Vista Build 5308 не создаются Ключи в рееестре в HKEY_LOCAL_MACHINE\Software

Не подскажете ли в чём проблема. Может быть для этого нужно иметь какие-то особые права?

Использую TRegistry.


Registry rights tester   (2006-03-09 23:51:00) [1]

Вот такой код работает под 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;


Nostradamus   (2006-03-09 23:28:00) [2]


> fellix   (09.03.06 16:56) [40]
>
> Увы, в общем случае, это - не решение.
> Ну не заставлять же каждого покупателя программы снижать
> глобальную security. Стоило бы разобраться, как получает
> права regedit. Возможно в Висте можно прописывать права
> отдельным программам...
>


Обязательно постараюсь узнать. Если удастся что-то выяснить, то напишу в форум...


Crash Coredump   (2006-03-09 18:45:00) [3]


> Стоило бы разобраться, как получает права regedit.


Рискну предположить, что по цифровой подписи.


Eraser   (2006-03-09 18:38:00) [4]


> fellix   (09.03.06 16:56) [40]

исправят... imho
на то она и бета.


fellix   (2006-03-09 16:56:00) [5]

Увы, в общем случае, это - не решение.
Ну не заставлять же каждого покупателя программы снижать глобальную security. Стоило бы разобраться, как получает права regedit. Возможно в Висте можно прописывать права отдельным программам...


Nostradamus   (2006-03-09 16:26:00) [6]

Ха, получилось.
Нужно было в
Administrative Tools -> Security Configuration Manager -> Local Policies -> Security Options
поставить опцию:
User Account Control: Run all users, including administrators, as standart users
в
Disabled

Ещё раз, всем спасибо за помощь, особенно fellix


Nostradamus   (2006-03-09 15:29:00) [7]

> fellix   (09.03.06 15:23) [37]

С удовольствием поэксеперементирую.

П.С. Большое спасибо за помощь


fellix   (2006-03-09 15:23:00) [8]


> 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:01:00) [9]

> fellix   (09.03.06 14:50) [34]

под XP - CHECKED OK
под Vista - CHECKED NO


fellix   (2006-03-09 14:50:00) [10]

> 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:00) [11]

Ну что ж, будем ждать пока появится :)


Crash Coredump   (2006-03-09 14:22:00) [12]

Nostradamus   (09.03.06 13:53) [32]

Скорее, больше ни у кого нет Vista 5308


Nostradamus   (2006-03-09 13:53:00) [13]


> n0name   (09.03.06 08:36) [29]
>
> а закрыть?
>


Что закрыть?

Я так понимаю, что больше ни у кого идей нет :(


DelphiN!   (2006-03-09 09:48:00) [14]

Получается под Виста большинство имеющихся программ работать не будут, жаль ...


DelphiN!   (2006-03-09 09:48:00) [15]

Хотя может еще и пофиксят


n0name   (2006-03-09 08:36:00) [16]

а закрыть?


Nostradamus   (2006-03-09 03:02:00) [17]

Пробую вот так, всё равно не работает - 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;


Nostradamus   (2006-03-09 00:22:00) [18]

Спасибо, попробую


fellix   (2006-03-08 20:50:00) [19]

Ну так надо получить.

MSDN:
SeBackupPrivilege - This privilege is required by the RegSaveKey and RegSaveKeyEx functions.
SeRestorePrivilege - This privilege is required by the RegLoadKey function.


Nostradamus   (2006-03-08 19:08:00) [20]

SeBackupPrivilege - Disabled
SeRestorePrivilege - Disabled


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо