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

Чтение лицензии из реестра в Delphi: доступ к HKEY_CURRENT_USER из аккаунта SYSTEM

Delphi , Программа и Интерфейс , Процессы и Сервисы

Введение

При работе с сервисами в Windows, особенно в контексте аккаунта SYSTEM, возникает проблема доступа к данным, которые хранятся в реестре в разделе HKEY_CURRENT_USER. Этот раздел реестра предназначен для хранения настроек и данных пользователя, и доступ к нему ограничен для сервисов, работающих под аккаунтом SYSTEM. В данной статье мы рассмотрим, как можно получить SID текущего пользователя из сервиса, написанного на Delphi, для доступа к данным лицензии, хранящимся в HKEY_CURRENT_USER.

Проблема

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

Решение

Использование LookupAccountName

Для получения SID пользователя можно использовать функцию LookupAccountName, которая возвращает SID, соответствующий заданному имени пользователя и домену. Пример кода на Object Pascal:

uses
  System.SysUtils,
  Winapi.Windows;

// Функция для получения SID пользователя
function GetUserSID(const UserName, Domain: string; out SID: TSecurityIdentifier): Boolean;
var
  SIDBuffer: PChar;
  dwSIDSize: DWORD;
begin
  Result := LookupAccountName(nil, PChar(UserName), SIDBuffer, dwSIDSize, PChar(Domain), nil, 0);
  if not Result then
    Exit(False);

  GetMem(SIDBuffer, dwSIDSize);
  Result := LookupAccountName(nil, PChar(UserName), SIDBuffer[0], dwSIDSize, PChar(Domain), nil, dwSIDSize);
  if Result then
  begin
    SetLength(SID, dwSIDSize div SizeOf(Char));
    TSecurityIdentifier.CreateFromSecurityDescriptor(SIDBuffer, dwSIDSize, TSecurityIdentifierFlags.isfIntegrity, SID);
  end;
  FreeMem(SIDBuffer, dwSIDSize);
end;

Использование библиотеки JWSCL

Другой способ — использование функций из библиотеки JWSCL (Delphi Jedi Windows Security Code Library), например, функции GetInteractiveUserName для получения имени активного пользователя.

Перечисление сессий

Для получения списка активных сессий и доступа к информации о пользователях можно использовать функции WTSEnumerateSessions и WTSQuerySessionInformation.

Примерный алгоритм

  1. Получить список активных сессий с помощью WTSEnumerateSessions.
  2. Для каждой сессии получить имя пользователя и домен с помощью WTSQuerySessionInformation.
  3. Использовать LookupAccountName для получения SID пользователя.
  4. Использовать ConvertSidToStringSid для конвертации SID в строку, если это необходимо.

Альтернативные подходы

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

Заключение

Доступ к данным в HKEY_CURRENT_USER из аккаунта SYSTEM можно организовать, используя различные методы, включая вызов функций Windows API и использование сторонних библиотек. Выбор метода зависит от конкретных требований и условий работы сервиса.

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

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

Необходимость доступа к данным лицензии, хранящимся в реестре пользователя (HKEY_CURRENT_USER), из сервиса, запущенного под аккаунтом SYSTEM в Delphi.


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

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




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


:: Главная :: Процессы и Сервисы ::


реклама


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

Время компиляции файла: 2024-12-22 20:14:06
2025-06-16 02:01:03/0.0031960010528564/0