Вот какя проблемы:
Код:
- Код: Выделить всё
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, в ней проблем нету. Может что я не доделал, понять немогу в чем собака зарыта