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

Перечислить привилегии пользователя

Delphi , ОС и Железо , Windows

Перечислить привилегии пользователя

Оформил: DeeCo
Автор: http://www.swissdelphicenter.ch

procedure TForm1.Button1Click(Sender: TObject);
 const
   TokenSize = 800; //  (SizeOf(Pointer)=4 *200) 
var
   hToken: THandle;
   pTokenInfo: PTOKENPRIVILEGES;
   ReturnLen: Cardinal;
   i: Integer;
   PrivName: PChar;
   DisplayName: PChar;
   NameSize: Cardinal;
   DisplSize: Cardinal;
   LangId: Cardinal;
 begin
   GetMem(pTokenInfo, TokenSize);
   if not OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY,
     hToken) then ShowMessage('OpenProcessToken error');
   if not GetTokenInformation(hToken, TokenPrivileges, pTokenInfo, TokenSize, ReturnLen) then
     ShowMessage('GetTokenInformation error');
   GetMem(PrivName, 255);
   GetMem(DisplayName, 255);
   for i := 0 to pTokenInfo.PrivilegeCount - 1 do
   begin
     DisplSize := 255;
     NameSize  := 255;
     LookupPrivilegeName(nil, pTokenInfo.Privileges[i].Luid, PrivName, Namesize);
     LookupPrivilegeDisplayName(nil, PrivName, DisplayName, DisplSize, LangId);
     ListBox1.Items.Add(PrivName +^I + DisplayName);
   end;
   FreeMem(PrivName);
   FreeMem(DisplayName);
   FreeMem(pTokenInfo);
 end;

Привет! Я перевёл текст на русский язык:

Функциональность

Процедура Button1Click вызывается при клике кнопки на форме. Она выполняет следующие задачи:

  1. Выделяет память для структуры TOKENPRIVILEGES и массива для хранения информации о привилегиях.
  2. Открывает токен процесса с помощью функции OpenProcessToken, указывая текущий процесс и требуемый доступ (TOKEN_ADJUST_ PRIVILEGES или TOKEN_QUERY).
  3. Получает информацию о привилегиях токена с помощью функции GetTokenInformation.
  4. Перебирает каждую привилегию в токе, используя функции LookupPrivilegeName и LookupPrivilegeDisplayName, чтобы получить имя и отображаемое имя каждой привилегии соответственно.
  5. Добавляет имя и отображаемое имя привилегии в список (ListBox1) для отображения.

Переменные

Вот краткое описание каждого переменной, используемой в процедуре:

  • hToken: Указатель на токен процесса.
  • pTokenInfo: Указатель на структуру TOKENPRIVILEGES, содержащую информацию о привилегиях токена.
  • ReturnLen: Длина возвращенного буфера (не используется в этом реализации).
  • i: Целочисленная переменная цикла.
  • PrivName: Указатель на буфер строк, хранящий имя привилегии.
  • DisplayName: Указатель на буфер строк, хранящий отображаемое имя привилегии.
  • NameSize и DisplSize: Размеры буфера для имени и отображаемого имени привилегии соответственно.
  • LangId: Идентификатор языка (не используется в этом реализации).

Замечания

  1. Константа TokenSize установлена в 800, что, вероятно, является размером буфера, который может accommodate максимальное количество привилегий (хотя это не проверяется явно).
  2. Процедура использует GetMem и FreeMem, чтобы динамически выделять память для структуры TOKENPRIVILEGES и буферов строк.
  3. Функции LookupPrivilegeName и LookupPrivilegeDisplayName используются для получения имени и отображаемого имени привилегии соответственно.

Альтернативное решение

Хотя это реализация функциональна, может быть полезно рассмотреть альтернативные подходы:

  1. Использовать более современную версию Delphi (например, 10.x), которая обеспечивает лучшую поддержку строк Unicode.
  2. Избежать использования динамической памяти с помощью определения фиксированных размеров массивов или структур вместо использования GetMem и FreeMem.
  3. Рассмотреть более эффективный способ перебора привилегий, например, использовать цикл с фиксированным верхним пределом (например, pTokenInfo.PrivilegeCount) вместо зависимости от индекса (i).

В статье рассматривается пример программы на языке Delphi, которая позволяет перечислить привилегии пользователя и отобразить их в списке.


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

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




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


:: Главная :: Windows ::


реклама


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

Время компиляции файла: 2024-12-22 20:14:06
2025-05-01 10:46:00/0.0035159587860107/0