Форум: "Система";
Текущий архив: 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 будет от старого юзера?
Страницы: 1 вся ветка
Форум: "Система";
Текущий архив: 2002.04.01;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.004 c