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

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

Запуск програмы от имени другого пользователя


Страницы:   1 2

Hamstel ©   (2003-07-18 17:43:00) 

необходимо запустить процесс от имени другого пользователя.

var phToken:cardinal;
SI: STARTUPINFO;
( UserName, Domain, Password, LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, phToken)

необходимо запустить процесс от имени другого пользователя.

var phToken:cardinal;
SI: STARTUPINFO;
PI: PROCESS_INFORMATION;

LogonUser(UserName, Domain, Password, LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, phToken);

CreateProcessAsUser(phToken, Program, "", nil, nil, false, CREATE_DEFAULT_ERROR_MODE, nil, Path, SI, PI);

И вот тут функция возвращает false А по GetLastError - 1314. нет привелегий. Хотя запуск идет от имени админа. никто не сталкивался, каких именно привилегий не хватает.


Набережных С.   (2003-07-19 16:07:00) [21]

1) Попытаться включить привилегию <> сделать это. Откуда ты знаешь, что попытки были удачными?
2) Привилегии нужны твоему процессу, а не пользователю.

Сначала с этим разберись, потом продолжим, если потребуется.


Hamstel   (2003-07-19 15:11:00) [22]

Да, забыл указать список переменных

var
SI: STARTUPINFO;
PI: PROCESS_INFORMATION;
UID: INT64;
TP: tTokenPrivileges;
RV: cardinal;


Hamstel   (2003-07-19 15:09:00) [23]

Код корявый, оптимизацией пока не занимался.

if not LogonUser("administrator", "polypack", "******", LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, phToken) then exit;
if LookupPrivilegeValue("", "SeIncreaseQuotaPrivilege", UID) then
begin
TP.PrivilegeCount:=1;
TP.Privileges[0].Luid:=UID;
TP.Privileges[0].Attributes:=SE_PRIVILEGE_ENABLED;
if not AdjustTokenPrivileges(phToken, false, TP, siZEof(TP), nil, RV) then
GetLastError;
end;
if LookupPrivilegeValue("", "SeAssignPrimaryTokenPrivilege", UID) then
begin
TP.PrivilegeCount:=1;
TP.Privileges[0].Luid:=UID;
TP.Privileges[0].Attributes:=SE_PRIVILEGE_ENABLED;
if not AdjustTokenPrivileges(phToken, false, TP, siZEof(TP), nil, RV) then
GetLastError;
end;
if LookupPrivilegeValue("", "SeTcbPrivilege", UID) then
begin
TP.PrivilegeCount:=1;
TP.Privileges[0].Luid:=UID;
TP.Privileges[0].Attributes:=SE_PRIVILEGE_ENABLED;
if not AdjustTokenPrivileges(phToken, false, TP, siZEof(TP), nil, RV) then
GetLastError;
end;
if not CreateProcessAsUser(phToken, "C:\1\BIN\IDEW32.EXE", "", nil, nil, false, CREATE_DEFAULT_ERROR_MODE, nil, "C:\1\BIN", SI, PI) then
( 0, PChar(IntToStr(Getlasterror)

Код корявый, оптимизацией пока не занимался.

if not LogonUser("administrator", "polypack", "******", LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, phToken) then exit;
if LookupPrivilegeValue("", "SeIncreaseQuotaPrivilege", UID) then
begin
TP.PrivilegeCount:=1;
TP.Privileges[0].Luid:=UID;
TP.Privileges[0].Attributes:=SE_PRIVILEGE_ENABLED;
if not AdjustTokenPrivileges(phToken, false, TP, siZEof(TP), nil, RV) then
GetLastError;
end;
if LookupPrivilegeValue("", "SeAssignPrimaryTokenPrivilege", UID) then
begin
TP.PrivilegeCount:=1;
TP.Privileges[0].Luid:=UID;
TP.Privileges[0].Attributes:=SE_PRIVILEGE_ENABLED;
if not AdjustTokenPrivileges(phToken, false, TP, siZEof(TP), nil, RV) then
GetLastError;
end;
if LookupPrivilegeValue("", "SeTcbPrivilege", UID) then
begin
TP.PrivilegeCount:=1;
TP.Privileges[0].Luid:=UID;
TP.Privileges[0].Attributes:=SE_PRIVILEGE_ENABLED;
if not AdjustTokenPrivileges(phToken, false, TP, siZEof(TP), nil, RV) then
GetLastError;
end;
if not CreateProcessAsUser(phToken, "C:\1\BIN\IDEW32.EXE", "", nil, nil, false, CREATE_DEFAULT_ERROR_MODE, nil, "C:\1\BIN", SI, PI) then
MessageBox(0, PChar(IntToStr(Getlasterror)), "", 0);
end;


Набережных С.   (2003-07-19 14:56:00) [24]

Лучше покажи код


Hamstel   (2003-07-19 14:45:00) [25]

Включил SE_ASSIGNPRIMARYTOKEN_NAME и SE_INCREASE_QUOTA_NAME а также SE_TCB_NAME - не помогло. Все таже 1314(A required privilege is not held by the client).


Hamstel   (2003-07-19 13:54:00) [26]

CreateProcessWithLogonW штука отличная, только пот NT 4 не работает:-((( А у меня сетка смешанная. Поэтому выбора нет, только CreateProcessasUser.


Набережных С.   (2003-07-19 06:42:00) [27]

>На >=Win2000 есть CreateProcessWithLogonW

И весьма удобная, кстати...если только не требуется предварительно поработать с маркером.


ZZ   (2003-07-18 21:53:00) [28]

Вот этот камень обычно является последним :)

PS. На >=Win2000 есть CreateProcessWithLogonW


Набережных С.   (2003-07-18 20:33:00) [29]

SE_ASSIGNPRIMARYTOKEN_NAME и SE_INCREASE_QUOTA_NAME. Но это не последний подводный камень.


Страницы:   1 2

Наверх

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