Вот какя проблемы:
Код:
- Код: Выделить всё
- function GetLastErrorText(Error: DWord): string;
 begin
 SetLength(Result, 1024);
 if FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, nil, Error, 0, @Result[1], Length(Result), nil) <> 0 then
 begin
 if Pos(#0, Result)> 0 then SetLength(Result, Pos(#0, Result) - 1);
 end
 else
 Result := 'Unknown error';
 Result := Format('Error %d: %s', [Error, Trim(Result)]);
 end;
 Procedure TRunAs.ExecWinLogonClick(Sender: TObject);
 Var
 Result: Boolean;
 si: TSTARTUPINFOW;
 pif: PROCESS_INFORMATION;
 User: PWideChar;
 Pass: PWideChar;
 Prog: PWideChar;
 Begin
 si. cb := SizeOf(tstartupinfo);
 si. dwFlags := STARTF_USESHOWWINDOW;
 // si. wShowWindow := SW_SHOWDEFAULT;
 si. lpReserved := nil;
 si. lpDesktop := nil;
 si. lpTitle := nil;
 User := PWideChar (WideString (UserName. Text));
 Pass := PWideChar (WideString (UserPass. Text));
 Prog := PWideChar (WideString (FileName. Text));
 Result := CreateProcessWithLogonW (
 User, nil,
 Pass, LOGON_WIth_profile, nil,
 Prog, 0, nil, nil, si, pif);
 If not Result Then ShowMessage ('Îøèáêà: ' + GetLastErrorText(GetLastError));
 End;
под WindowsXP работает бес проблем,
но под Windows 2003 Enterprise SP1 выдает ошибку 1783 (Неверные данные переданные Заглушке)
Смотрел на форумах, говорят нужно обновления вроде проблема Microsoft. Обновил до SP2. Проблема осталась.
Есть программа работающая на данной функции под 2003, в ней проблем нету. Может что я не доделал, понять немогу в чем собака зарыта


