Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.01.2017, 16:13   #1
Replicant
Форумчанин
 
Аватар для Replicant
 
Регистрация: 17.08.2009
Сообщений: 139
По умолчанию CreateProcessAsUser Ошибка: access violation at address 76C2B79B im module 'kernel32.dll'

Задача состоит в запуске процесса от имени другого пользователя пароль которого известен, делаю через:
Код:
LogonUser //Выполняется успешно
CreateProcessAsUser // ловлю ошибку access violation at address 76C2B79B im module 'karnel32.dll'
Предполагаю проблема в флагах, но пока не смог толком разобраться. Что я делаю не так?
Код:
Код:
var
  hUserToken: THandle;
  StartUpInfo: TStartUpInfo;
  ProcInfo: TProcessInformation;
  Name, Domain, Password: string;
  cmd: string;
begin
  Name:='Test';
  Domain:='';
  Password:= '1111';
  cmd:='cmd /c ptintmanagemrnt';
  if not LogonUser(PChar(Name), PChar(Domain), PChar(Password),
                   LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, hUserToken) then
                   begin
                    ShowMessage(SysErrorMessage(GetLastError));
                    Exit;
                   end;
  FillChar(StartUpInfo, SizeOf(StartUpInfo), #0);
  with StartUpInfo do begin
    cb:= SizeOf(StartUpInfo);
    wShowWindow:=SW_SHOWNORMAL;
  end;
  if not CreateProcessAsUser(hUserToken, nil, PChar(cmd),
                    nil, nil, False, CREATE_NEW_CONSOLE or CREATE_NEW_PROCESS_GROUP,
                    nil, nil, StartUpInfo, ProcInfo) then
                    begin
                      ShowMessage(SysErrorMessage(GetLastError));
                      Exit;
                    end;
Изображения
Тип файла: jpg 1.jpg (11.5 Кб, 131 просмотров)
Replicant вне форума Ответить с цитированием
Старый 14.01.2017, 12:49   #2
Replicant
Форумчанин
 
Аватар для Replicant
 
Регистрация: 17.08.2009
Сообщений: 139
По умолчанию

Начал передавать отдельно имя приложения от параметров запуска в lpApplicationName и lpCommandLine - все поехало, вопрос снят.
Так же, если передавать параметры так как прописано в коде выше, проблему можно вылечить следующим образом, перед передачей пишем:
Код:
 {$IFDEF UNICODE}
      if StringRefCount(cmd) = -1 then begin
        cmd := Copy(cmd, 1, MaxInt);
      end;
  {$ENDIF UNICODE}

Последний раз редактировалось Replicant; 14.01.2017 в 13:11.
Replicant вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка: access violation at address 03d6d615 in module 'Matrix.dll' read of address 00000000 Oda. Общие вопросы Delphi 11 04.04.2016 17:40
Ошибка: "Access violation at address 00454F01 in module 'Project1.exe'. Read of address 00000000. Arktos1995 Общие вопросы Delphi 5 12.12.2012 22:33
access violation at address 025D1E55 in module dbexpmda40.dll Makaralex БД в Delphi 1 29.10.2012 10:48
Ошибка: "Access violation at address 0045E503 in module 'Project1.exe'. Read of address 00316777. Katexxxsa Общие вопросы Delphi 1 03.10.2011 23:16
Ошибка: "Access violation at address 00454F01 in module 'Project1.exe'. Read of address 00000000. Fen1x Общие вопросы Delphi 8 13.10.2007 20:13