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

Как получить локализованное имя встроенной учетной записи Windows для `CreateProcessWithLogonW`

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

Как получить локализованное имя встроенной учетной записи Windows для CreateProcessWithLogonW

При работе с встроенными учетными записями Windows в коде на языке Pascal (Delphi) может возникнуть проблема с необходимостью использования локализованных имен для выполнения процесса под учетной записью администратора. В данной статье мы рассмотрим, как можно решить эту задачу, используя примеры кода и рекомендации, основанные на материале из контекста.

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

При использовании функции CreateProcessWithLogonW для запуска процесса под учетной записью, такой как "Администратор", необходимо передать локализованное имя учетной записи. Например, в французской локализации имя "Администратор" будет "Administrat_eur_". Если передать функцию стандартное англоязычное имя "Administrator", это приведет к ошибке ERROR_LOGON_FAILURE.

Получение локализованного имени учетной записи

Для получения локализованного имени учетной записи можно использовать SID (Security Identifier). Однако, для получения SID встроенной учетной записи, необходимо пройти через цепочку функций, что может быть избыточным для такой простой задачи, как получение строки с доменом.

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

В альтернативном ответе пользователя упоминается, что можно использовать LsaOpenPolicy, LsaQueryInformationPolicy с PolicyAccountDomainInformation, CreateWellKnownSid с WinAccountAdministratorSid и LsaLookupSids. Это более прямой и эффективный способ получения необходимого SID.

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

Использование указанной альтернативной цепочки вызовов позволяет получить SID встроенной учетной записи без необходимости получения SID текущего пользователя и последующего анализа. Это упрощает задачу и делает код более оптимальным.

Пример кода

uses
  Winapi.Windows,
  Winapi.Securidds;

function GetAdminSid(out Sid: PSecurtyID): Boolean;
var
  PolicyHandle: PLSA_HANDLE;
  DomainInfo: PLSA_UNICODE_STRING;
  AdminSid: PWinAccountSidType;
begin
  Result := LsaOpenPolicy(nil, POLICY_VIEW_LOCAL, PolicyHandle);
  if not Result then
  Exit(False);

  Result := LsaQueryInformationPolicy(PolicyHandle, PolicyAccountDomainInformation, DomainInfo);
  if not Result then
  Exit(False);

  SetLength(AdminSid, SizeOf(WinAccountSidType));
  with AdminSid^ do
  begin
    SidIdentifierAuthority := DomainInfo^.SidIdentifierAuthority;
    SidSubAuthority := WinAccountAdministratorSid;
  end;

  Result := CreateWellKnownSid(SidTypeWinAccount, AdminSid, Sid[0]);
  if not Result then
  Exit(False);

  // Дополнительные шаги для использования полученного SID...
end;

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

Заключение

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

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

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

Описание: При работе с встроенными учетными записями Windows в Delphi необходимо использовать локализованные имена для корректной работы функции `CreateProcessWithLogonW`, чтобы избежать ошибки `ERROR_LOGON_FAILURE`.


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

Получайте свежие новости и обновления по 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:31:09/0.0032720565795898/0