Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Ошибка Доступа 5 при Использовании `CreateProcessWithLogonW` в Службах Windows: Анализ и Решения

Delphi , Синтаксис , Справочник по API-функциям

Ошибка доступа 5 при использовании CreateProcessWithLogonW в службах Windows: анализ и решения

Вопрос пользователя связан с проблемой, возникшей при попытке запуска приложения из службы Windows с использованием функции CreateProcessWithLogonW. При запуске кода внутри службы возникает ошибка с кодом 5: "Access Denied". В то же время, при выполнении того же кода вне службы, проблем не возникает.

Анализ проблемы

Функция CreateProcessWithLogonW предназначена для запуска процесса под учетной записью, отличной от той, под которой выполняется текущий процесс. Однако, согласно документации MSDN, использование этой функции из процесса, работающего под учетной записью LocalSystem, невозможно, так как токен LocalSystem не содержит необходимый SID для логирования.

Пример кода на Object Pascal (Delphi)

var
  usr, dmn, pwd, cmd, wdir: PWideChar;
  si: STARTUPINFO;
  pi: PROCESS_INFORMATION;
begin
  usr := 'myuser';
  dmn := 'mydomain';
  pwd := 'thepassword';
  cmd := 'c:\myapp.exe -calculate';
  wdir := 'c:\';

  FillChar(si, SizeOf(si), 0);
  si.cb := SizeOf(si);

  if not CreateProcessWithLogon(
    PWideChar(usr),
    PWideCharOf(dmn),
    PWideChar(pwd),
    LOGON_WITH_PROFILE,
    nil,
    PWideChar(cmd),
    NORMAL_PRIORITY_CLASS or CREATE_NEW_CONSOLE or CREATE_NEW_PROCESS_GROUP,
    nil,
    PWideChar(wdir),
    si,
    pi
  ) then
    RaiseLastOSError; // Возможное возникновение ошибки с кодом 5
end;

Подтвержденное решение

Чтобы решить проблему, необходимо изменить учетную запись, под которой запускается служба, на учетную запись пользователя, а не использовать LocalSystem. В качестве альтернативы, можно использовать функции CreateProcessAsUser и LogonUser, которые позволяют запустить процесс под другой учетной записью, не привязываясь к SID LocalSystem.

Альтернативный ответ

Проверьте, что программа, которую вы пытаетесь запустить, действительно находится на локальном диске, а не на сетевом разделе, так как LocalSystem не имеет сетевой идентичности и не может обращаться к удаленным ресурсам.

Дополнительные шаги

Если проблема не связана с сетевым доступом, можно использовать инструменты, такие как Process Monitor (ProcMon), для отладки проблемы. Это поможет выявить операции с файлами и реестром, которые могут привести к отказу в доступе.

Также рекомендуется проверить журнал событий Windows, особенно журнал безопасности, чтобы найти возможные причины отказа в доступе.

Заключение

Использование CreateProcessWithLogonW в службах, работающих под учетной записью LocalSystem, приведет к ошибке доступа. Для решения проблемы необходимо изменить учетную запись службы или использовать альтернативные функции для запуска процесса под другой учетной записью.

Создано по материалам из источника по ссылке.

Пользователь столкнулся с проблемой ошибки доступа 5 при попытке запустить приложение из службы Windows, используя функцию `CreateProcessWithLogonW`, и ищет анализ и решения данной проблемы.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Справочник по API-функциям ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-01-13 19:09:48/0.0037190914154053/0