Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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.01 c
15-1146649865
erika
2006-05-03 13:51
2006.05.28
Проблема с программой написанонй под D3 с работой в WS XP


2-1147195430
BAngel
2006-05-09 21:23
2006.05.28
не меняется цвет в ColorBox


2-1147333142
evgenij_
2006-05-11 11:39
2006.05.28
Break in MenuItem


3-1144153515
RomanH
2006-04-04 16:25
2006.05.28
Обновление данных


10-1120034293
salexn
2005-06-29 12:38
2006.05.28
Потоки и работа с DCOMConnection





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский