CreateProcessWithLogonW Ошибка 1783 в Windows 2003

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

Ответить
cepreu
новенький
Сообщения: 24
Зарегистрирован: 01.05.2007 13:20:15
Откуда: г.Киев

CreateProcessWithLogonW Ошибка 1783 в Windows 2003

Сообщение cepreu »

Всеп привет!
Вот какя проблемы:

Код:

Код: Выделить всё

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, в ней проблем нету. Может что я не доделал, понять немогу в чем собака зарыта
cepreu
новенький
Сообщения: 24
Зарегистрирован: 01.05.2007 13:20:15
Откуда: г.Киев

Сообщение cepreu »

Нашел !!!

Если интересно:
Старый вариант (Работал только в XP)
...
Begin
si. cb := SizeOf(tstartupinfo);
si. dwFlags := STARTF_USESHOWWINDOW;
...


Новый варинт (Работает XP и 2003)
...
Begin
ZeroMemory(@Si,Sizeof(si));
ZeroMemory(@pif, SizeOf (pif)); // не достающей строки для 2003
si. cb := SizeOf(tstartupinfo);
si. dwFlags := STARTF_USESHOWWINDOW;
...


Но функция CreateProcessWithLonon () возвращает False (процесс не запущен) Код ошибки не выдается (наверное 0), но окно процесса появляется
Ответить