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

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

проблемы с CreateProcessAsUser [D6, D7, Win2k, WinXP]


CrytoGen ©   (2004-02-25 14:11:00) 

возникает проблема с вызовом функции CreateProcessAsUser.
нормально проходит вызов LogonUser, а при вызове CreateProcessAsUser появляется ошибка "Клиент не обладает требуемыми правами".
Может кто-нибудь сталкивался с подобной проблемой?
где что настроить?


CrytoGen   (2004-02-25 16:03:00) [1]

Новая ошибка...
"Наложение ввода вывода", что это может быть?
и как с этим бороться?


Игорь Шевченко   (2004-02-25 15:08:00) [2]


> консольное приложение запущенное таким образом не создаёт
> файл, а вот запущенное обычным образом создаёт


Если бы ты выражал свои мысли более понятным образом, я бы попытался понять проблему. К сожалению, я не вижу твоего экрана и событий, происходящих на нем, поэтому мне трудно дать какую-либо консультацию.


CrytoGen   (2004-02-25 15:06:00) [3]

уже поздно, я всё переделал... :) под CreateProcessWithLogonW
странная вещь...
консольное приложение запущенное таким образом не создаёт файл, а вот запущенное обычным образом создаёт :)


Игорь Шевченко   (2004-02-25 15:02:00) [4]

CrytoGen   (25.02.04 14:52)

Вставь после строчки
Win32Check(Result)

строчки
   if GetLastError <> ERROR_SUCCESS then
     Result := false;

Будешь приятно удивлен.


CrytoGen   (2004-02-25 14:52:00) [5]

функция не возвращает ошибки
...
function SetPrivilege(aPrivilegeName:String;aEnabled:boolean):boolean;
    var TPPrev,TP:TTokenPrivileges;
        Token:THandle;
        dwRetLen:DWord;
begin
Result:=False;
OpenProcessToken(GetCurrentProcess,TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY,Token);
TP.PrivilegeCount:=1;
if (LookupPrivilegeValue(nil,PChar(aPrivilegeName),TP.Privileges[0].LUID)) then
begin
  if aEnabled then
   TP.Privileges[0].Attributes:=SE_PRIVILEGE_ENABLED
  else
   TP.Privileges[0].Attributes:=0;
  dwRetLen:=0;
  Result:=AdjustTokenPrivileges(Token,False,TP,SizeOf(TPPrev),TPPrev,dwRetLen);
  Win32Check(Result);
end;
CloseHandle(Token);
end;
begin
 if SetPrivilege('SeTcbPrivilege',True) then
 begin
...


Игорь Шевченко   (2004-02-25 14:48:00) [6]

CrytoGen   (25.02.04 14:40)

Может быть, тебе только кажется, что ты ее получаешь ?
Кстати, неплохо бы и код привести...

function CreateProcessWithLogonW (const lpUsername : PWideChar;
 const lpDomain : PWideChar; const lpPassword : PWideChar;
 dwLogonFlags : DWORD; const lpApplicationName : PWideChar;
 lpCommandLine : PWideChar; dwCreationFlags : DWORD;
 lpEnvironment : Pointer; const lpCurrentDirectory : PWideChar;
 lpStartupInfo : PStartupInfo;
 lpProcessInfo : PProcessInformation) : Boolean; stdcall;
 external 'advapi32.dll' name 'CreateProcessWithLogonW'


CrytoGen   (2004-02-25 14:40:00) [7]

:)
кроме того я не нашёл CreateProcessWithLogonW в Delphi


Игорь Шевченко   (2004-02-25 14:39:00) [8]

CrytoGen   (25.02.04 14:35)


> эту привилегию я получаю


Научи ? :)


CrytoGen   (2004-02-25 14:35:00) [9]

эту привилегию я получаю, и вроде бы получение происходит нормально, кроме того ошибка в этом случае бы возникала при вызове LogonUser...


Игорь Шевченко   (2004-02-25 14:24:00) [10]

If your process has the SE_TCB_NAME privilege, it can call the LogonUser function to get a primary token that represents a specified user.

Я сильно сомневаюсь, что у тебя есть эта привилегия.

Попробуй посмотреть в сторону CreateProcessWithLogonW


Наверх

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