Процедура Button1Click вызывается при клике кнопки на форме. Она выполняет следующие задачи:
Выделяет память для структуры TOKENPRIVILEGES и массива для хранения информации о привилегиях.
Открывает токен процесса с помощью функции OpenProcessToken, указывая текущий процесс и требуемый доступ (TOKEN_ADJUST_ PRIVILEGES или TOKEN_QUERY).
Получает информацию о привилегиях токена с помощью функции GetTokenInformation.
Перебирает каждую привилегию в токе, используя функции LookupPrivilegeName и LookupPrivilegeDisplayName, чтобы получить имя и отображаемое имя каждой привилегии соответственно.
Добавляет имя и отображаемое имя привилегии в список (ListBox1) для отображения.
Переменные
Вот краткое описание каждого переменной, используемой в процедуре:
hToken: Указатель на токен процесса.
pTokenInfo: Указатель на структуру TOKENPRIVILEGES, содержащую информацию о привилегиях токена.
ReturnLen: Длина возвращенного буфера (не используется в этом реализации).
i: Целочисленная переменная цикла.
PrivName: Указатель на буфер строк, хранящий имя привилегии.
DisplayName: Указатель на буфер строк, хранящий отображаемое имя привилегии.
NameSize и DisplSize: Размеры буфера для имени и отображаемого имени привилегии соответственно.
LangId: Идентификатор языка (не используется в этом реализации).
Замечания
Константа TokenSize установлена в 800, что, вероятно, является размером буфера, который может accommodate максимальное количество привилегий (хотя это не проверяется явно).
Процедура использует GetMem и FreeMem, чтобы динамически выделять память для структуры TOKENPRIVILEGES и буферов строк.
Функции LookupPrivilegeName и LookupPrivilegeDisplayName используются для получения имени и отображаемого имени привилегии соответственно.
Альтернативное решение
Хотя это реализация функциональна, может быть полезно рассмотреть альтернативные подходы:
Использовать более современную версию Delphi (например, 10.x), которая обеспечивает лучшую поддержку строк Unicode.
Избежать использования динамической памяти с помощью определения фиксированных размеров массивов или структур вместо использования GetMem и FreeMem.
Рассмотреть более эффективный способ перебора привилегий, например, использовать цикл с фиксированным верхним пределом (например, pTokenInfo.PrivilegeCount) вместо зависимости от индекса (i).
В статье рассматривается пример программы на языке Delphi, которая позволяет перечислить привилегии пользователя и отобразить их в списке.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.