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

### Устранение проблем с назначением привилегий "Logon As A Service" в Delphi 2010 на Windows XP

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

Устранение проблем с назначением привилегий "Logon As A Service" в Delphi 2010 на Windows XP

Разработчики, работающие с Delphi и Object Pascal, иногда сталкиваются с проблемами, связанными с управлением привилегиями в операционной системе. Одной из таких проблем является назначение привилегии "Logon As A Service" пользователю, что может быть необходимо для запуска сервисов от имени этого пользователя. В данной статье мы рассмотрим, как решить проблему, описанную в вопросе пользователя, связанную с использованием функции LsaAddAccountRights в Delphi 2010 при работе с JEDI Windows API и JWSCL на Windows XP.

Описание проблемы

Пользователь столкнулся с тем, что после попытки назначения привилегии "Logon As A Service" пользователю с помощью функции LsaAddAccountRights, привилегия не добавляется. Это подтверждается тем, что после выполнения функции и её возврата, проверка в редакторе групповых политик показывает, что пользователь всё ещё не имеет нужной привилегии.

Анализ кода

В представленном коде есть несколько моментов, на которые стоит обратить внимание:

  1. При открытии политики используется флаг POLICY_LOOKUP_NAMES, который не позволяет изменять учетные записи.
  2. Необходимо использовать флаг POLICY_CREATE_ACCOUNT или MAXIMUM_ALLOWED для возможности изменения учетных записей.
  3. В коде не проверяется возвращаемое значение функции LsaAddAccountRights. Для отладки необходимо добавить вывод кода ошибки.

Подтвержденный ответ

Для корректной работы с LsaAddAccountRights необходимо открыть политику с флагами POLICY_CREATE_ACCOUNT или POLICY_READ | POLICY_WRITE | POLICY_CREATE_SECRET | POLICY_SET_DEFAULTS | POLICY_SERVER | POLICY_ALTERNATIVE_SERVER | POLICY_READ_CLIENTS | POLICY_WRITE_CLIENTS | POLICY_TRUST_ADMIN | POLICY_CREATE_ACCOUNT | MAXIMUM_ALLOWED. Это позволит изменить учетные записи и применить необходимые привилегии.

Исправленный код

function AddPrivilegeToAccount(AAccountName, APrivilege: String): DWORD;
var
  lStatus: NTSTATUS;
  lObjectAttributes: TLsaObjectAttributes;
  lPolicyHandle: TLsaHandle;
  lPrivilege: TLsaUnicodeString;
  lSid: PSID;
  lSidLen: DWORD;
  lTmpDomain: String;
  lTmpDomainLen: DWORD;
  lTmpSidNameUse: TSidNameUse;
  lPrivilegeWStr: String;
begin
  ZeroMemory(@lObjectAttributes, SizeOf(lObjectAttributes));
  // Открываем политику с нужными правами
  lStatus := LsaOpenPolicy(nil, lObjectAttributes, POLICY_CREATE_ACCOUNT or POLICY_LOOKUP_NAMES, lPolicyHandle);
  // ...
end;

Пример использования MAXIMUM_ALLOWED

lStatus := LsaOpenPolicy(nil, lObjectAttributes, MAXIMUM_ALLOWED, lPolicyHandle);

Пример вывода кода ошибки

procedure TForm1.Button1Click(Sender: TObject);
begin
  var resultCode: DWORD = AddPrivilegeToAccount('Sam', 'SeServiceLogonRight');
  ShowMessage(IntToHex(resultCode, 8));
end;

Вывод

После внесения изменений в код и корректного открытия политики с нужными правами, функция LsaAddAccountRights должна работать корректно и привилегия "Logon As A Service" будет назначена указанному пользователю. Обязательно проверяйте возвращаемое значение функции для отладки и устранения возможных ошибок.

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

Разработчики в Delphi 2010 на Windows XP сталкиваются с трудностями при назначении привилегии "Logon As A Service", что требует корректного использования функций управления привилегиями через JEDI Windows API и JWSCL.


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

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




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


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


реклама


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

Время компиляции файла: 2024-12-22 20:14:06
2024-12-26 14:18:10/0.0033280849456787/0