Форум: "Система";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.04.01;
Скачать: [xml.tar.bz2];




Вниз

Как в NT-ях разрешить программе редактировать реестр текущего пользователя? 


Nomad   (2001-12-29 15:14) [0]

сабж. но с двумя "но".. пользователю запрещено редактирование реестра.. а изменять надо раздел HKCU\....\Policies.
т.е. у нужно выдать запрос на пароль администратора.. но если запускать всю программу с правами адм. - HKCU - уже будет указывать на него. Тогда - как найти нужного юзера в HKEY_USERS? Да еще и под XP? там куча юзеров может быть подключена одновременно..



Tosov   (2001-12-29 16:07) [1]

О какой ветке иднт речь? Все, что в HKCU доступно любому юзеру (каждому свое естественно :)). Если в этом есть сомнения - запусти regedt32 и просмотри разрешения (+ поставь правильные).
Найти юзера можно по его SID (вроде это он и есть в HKEY_USERS)..



Nomad   (2001-12-31 15:44) [2]

Не все так просто. Вообще вопрос идет о Win XP. Пользователю ставятся права guest и по-умолчанию нет ему доступа вообще на редактирование реестра..
Как я понимаю эти разрешения (которые ставятся в regedt32) менять на ходу можно только с привилегиями администратора.
Тогда, легче уже будет заставить программу выполнятся с правами администратора (средствами винды), а потом редактировать ветку HKEY_USERS. Для этого надо, уже имея права администратора, узнать SID текущего пользователя, но в XP их может быть много. Т.е. нужен тот, который запустил процесс..



Nomad   (2001-12-31 16:15) [3]

Хе. в Win XP regedt32 вызывает regedit.. Пробовал запустить версию от 2000-й - работает, но не показывает разрешения и не дает править. Вывод - под XP прийдется лезть через HKEY_USERS.



Nomad   (2001-12-31 18:30) [4]

Мда.. кто чем занят в новогоднюю ночь..

Написал я процедурки доставания SIDа.. Может, кому пригодится..


function Sid2Text(ps:PSID):string;

var

psia:PSIDIDENTIFIERAUTHORITY;
dwSubAuthorities,i:word;
dwSidRev:word;

begin

if IsValidSid(ps) then

begin
psia:= GetSidIdentifierAuthority(ps);

dwSubAuthorities:=GetSidSubAuthorityCount(ps)^;
dwSidRev:=1;

result:="S-"+inttostr(dwSidRev);
with psia^ do
if (value[0]<>0) and (value[1]<>0) then
for i:=0 to 5 do result:=result+inttostr(value[i]) else
result:=result+"-"+inttostr(Value[5]+(Value[4] shl 8)+(Value[3] shl 16)+(Value[2] shl 24));

for i:=0 to dwSubAuthorities-1 do
result:=result+"-"+inttostr(GetSidSubAuthority( ps, i )^);

end;
end;

Procedure GetCurrentSid(var S:PSID);


var

ReferencedDomain:LPSTR;

cbSid,cbReferencedDomain:DWORD;
peUse:SID_NAME_USE;
begin
cbSID:=128;
cbReferencedDomain:=16;
GetMem(S,cbsid);
GetMem(ReferencedDomain,cbReferencedDomain);

LookupAccountName("","User",S,cbSID,ReferencedDomain,cbReferencedDomain,peUse);

FreeMem(ReferencedDomain);

end;

var
sid: PSID;

begin
getcurrentsid(sid);
MessageDlg(sid2text(sid),mtInformation,[mbOK],0);
if sid<>nil then FreeMem(sid);
end.


Сейчас ищу, как корректно средствами системы запустить программу с запросом пароля администратора.



Tosov   (2001-12-31 19:09) [5]

Сейчас ищу, как корректно средствами системы запустить программу с запросом пароля администратора.

CreateProcessWithLogonW



Nomad   (2001-12-31 19:15) [6]

Вот вот. По нему и ищу описаниеце.. если просто запускать runas"ом - некрасиво выходит, а передавать консольному приложению пароль из программы - и дырок много и, извиняюсь, через задницу.



Nomad   (2001-12-31 19:46) [7]

Remarks
CreateProcessWithLogonW does not load the specified user"s profile into the HKEY_USERS registry key. This means that access to information in the HKEY_CURRENT_USER registry key may not produce results consistent with a normal interactive logon.


Если я правильно понимаю, это должно значить, что с SIDом можно было и не возиться.. бред..



Tosov   (2002-01-02 00:05) [8]

Это ты намекаешь на то, что HKCU будет от старого юзера?




Форум: "Система";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.04.01;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.73 MB
Время: 0.035 c
3-34              Mike c                2002-03-04 19:53  2002.04.01  
не соединяется с базой IB! :(


1-108             совсем Новенький      2002-03-21 13:25  2002.04.01  
Как узнать Ip в формате LongInt


1-132             DenKop                2002-03-21 19:50  2002.04.01  
Криптография


3-8               Андре                 2002-03-04 12:10  2002.04.01  
BLOB


3-33              solsoft               2002-03-06 13:43  2002.04.01  
Нет доступа к Access через BDE