Форум: "Система";
Поиск по всему сайту: 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.019 c
1-163             Max                   2002-03-22 08:32  2002.04.01  
Delphi 5 + W2k


6-267             Reals                 2002-01-17 15:38  2002.04.01  
В локальной сети, нужно найти только сервер(а) (его имя).


1-194             sammy                 2002-03-19 09:33  2002.04.01  
Про trial-version


3-39              ЛенаК                 2002-03-06 09:36  2002.04.01  
deadlock violation при удалении записей


1-235             -Stealtch-            2002-03-20 17:10  2002.04.01  
Перевод Word в TDateTime