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

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

Доступ к файлам


ShaH ©   (2002-01-23 13:16:00) 

Такая вот ситуация, когда процесс запускается от имени другого пользователя, этот процесс не имеет прав на открытие файлов. В чем дело, может надо какие-нибудь дополнительные параметры передавать в CreateProcessAsUser() ??


Tosov   (2002-01-26 00:06:00) [1]

ShaH ©
Я запускал этот код под NT4.Запускался far и с правами все было нолрмально - по факту - кому что положено тот то и получил :) А положено было только юзеру, под которым запускался фар.
Посмотри еще раз права доступа в конфигурационному файлу.


Tosov   (2002-01-25 23:34:00) [2]

VuDZ
Это все интересно, но как программа в таком случае работает если у нее нет прав на это? ShaH же сказал, что ошибок не возникает. А вышеуказанный ключ должен запускать программу as LocalSystem.


VuDZ   (2002-01-25 09:13:00) [3]

1. попробуй использовать CreateProcessWithLogonW, так как LogonUser требует SE_TCB_NAME привилегию, которая по умолчанию есть только у LocalSystem аккаунта.
В Win2K можно вызвать CreateProcessWithLogonW, которая не требует дополнительных привилегий. Она обращается к RunAs сервису, который вызывает LogonUser и CreateProcessAsUser из LocalSystem аккаунта.
В NT 4 единственный известный мне способ - это сделать свой сервис в LocalSystem, из которого вызывать LogonUser и CreateProcessAsUser. Ограничение LogonUser можно обойти, если использовать NTLM SSP для аутентификации и получения токена (это описано в MSDN KB article Q180548). Но даже имея токен, вызвать CreateProcessAsUser из обычного аккаунта не получится, поскольку она требует наличия SE_ASSIGNPRIMARYTOKEN_NAME привилегии, которая тоже по умолчанию только у LocalSystem.

Ещё вопросы есть?


ShaH   (2002-01-25 08:26:00) [4]

Запускаемая программа при запуске пытается прочитать свой файл настроек и не может, если она была запущена при помощи вышеописанного кода. Если она просто запускается , то все нормально, все файлы открываются. Программа-загрузчик прописывается в реестре в ключе Software\Microsoft\Windows NT\Current Version\Winlogon\System


_Tosov   (2002-01-25 07:30:00) [5]

Визуально вроде все в норме
Если хочешь- можешь прислать весь исходник (часть которая запускает программу и то что выполняется до и после этого - дома скомпилирую и проверю
Или кроме того что ты написал ничего важного в программе не происходит?


_Tosov   (2002-01-25 07:29:00) [6]

Визуально вроде все в норме
Если хочешь- можешь прислать весь исходник (часть которая запускает программу и то что выполняется до и после этого - дома скомпилирую и проверю
Или кроме того что ты написал ничего важного в программе не происходит?


ShaH   (2002-01-24 19:39:00) [7]

код выложил, с нетерпением жду ответа.
ПОМОГИТЕ !!!!!!


ShaH   (2002-01-24 09:08:00) [8]

Вот код, логин с паролем правильные, иначе бы возникала ошибка аутентификации. Помогите плиз.

var
hToken: PHANDLE;
si: STARTUPINFO;
pi: PROCESS_INFORMATION;
Err : integer;
lpDesktop: string;
begin
Path:= ExtractFilePath(ParamStr(0));
if FromFile then
LoadFromFile
else
LoadFromRegistry;
if (LogonUser(PChar(User),
PChar(Domain),
PChar(Pass),
LOGON32_LOGON_INTERACTIVE,
LOGON32_PROVIDER_DEFAULT,
hToken^))
then begin
si.cb:=sizeof(STARTUPINFO);
lpDesktop:="WinSta0\Default";
si.lpDesktop:=Addr(lpDesktop[1]);
Err:=Cardinal(CreateProcessAsUser(
hToken^, nil, PChar(Prog) , nil, nil, false,
NORMAL_PRIORITY_CLASS, nil, nil ,
si, pi ));
LogMess("Функции CreateProcessAsUser вернула "+IntToStr(Err));
if (Err<>0)
then begin
LogMess("Все хорошо !!! "+IntToStr(Err));
end
else begin
Err:=GetLastError();
LogMess("Ошибка CreateProcessAsUser "+IntToStr(Err));
end;
end
else begin
Err:=GetLastError();
LogMess("Ошибка аутентификации "+IntToStr(Err));
end;


VuDZ   (2002-01-24 06:11:00) [9]

покажи код, буд ласко


Tosov   (2002-01-23 23:44:00) [10]

У меня когда процесс запускается от другого пользователя от имеет ВСЕ права этого пользователя... в т.ч и права доступа к папкам/файлам.В CreateProcessAsUser передаю тоже, что и в CreateProcess.
Или у того логина нет доступа к файлу или ... попробуй поделиться кодом + проверь логин пользователя из нового процесса.


Наверх

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