Проверка прав администратора для учетных записей пользователей в Delphi
Вопрос проверки прав администратора для учетных записей пользователей на локальной машине является актуальным для разработчиков, работающих с технологиями Windows. В данной статье мы рассмотрим, как можно проверить, является ли учетная запись пользователя администратором, используя язык программирования Object Pascal в среде разработки Delphi.
Проблема
Иногда возникает необходимость проверить, имеет ли конкретный пользователь права администратора на локальной машине. Существуют методы для проверки текущего пользователя, но как быть, если нужно проверить права для всех пользователей без входа в каждую учетную запись?
Решение
Для решения этой задачи можно использовать функцию NetUserEnum, которая позволяет перечислить учетные записи пользователей с указанием уровня привилегий. В примере кода ниже представлена функция GetUsers, которая возвращает список пользователей с определенным уровнем привилегий.
program CheckAdminRights;
{$APPTYPE CONSOLE}
uses
SysUtils,
Windows,
ActiveX;
const
USER_PRIV_GUEST = 0;
USER_PRIV_USER = 1;
USER_PRIV_ADMIN = 2;
USER_PRIV_ANY = 3;
type
TPrivLevel = USER_PRIV_GUEST..USER_PRIV_ANY;
type
NetApiStatus = DWORD;
// Объявление структуры TUserInfo2 и прочих необходимых типов...
function NetApiBufferFree(Buffer: Pointer): NetApiStatus;
// Описание функции NetApiBufferFree...
function NetUserEnum(
servername: LPCWSTR;
level: DWORD;
filter: DWORD;
var bufptr: Pointer;
prefmaxlen: DWORD;
var entriesread: DWORD;
var totalentries: DWORD;
resume_handle: LPDWORD
): NetApiStatus;
// Описание функции NetUserEnum...
function GetUsers(PrivLevel: TPrivLevel; users: TStringList): Integer;
// Функция для получения списка пользователей с определенным уровнем привилегий...
var
res: Integer;
memo: TMemoryStream;
begin
memo := TMemoryStream.Create;
try
res := GetUsers(USER_PRIV_ADMIN, memo);
if res <> 0 then
writeln('Ошибка при получении списка пользователей! Код ошибки: ', res);
else
begin
for var user in memo do
writeln(user);
end;
finally
memo.Free;
end;
end;
begin
GetUsers(res);
Readln;
end.
Пример использования функции GetUsers:
procedure TForm1.Button1Click(Sender: TObject);
var
res: Integer;
users: TStringList;
begin
users := TStringList.Create;
try
res := GetUsers(USER_PRIV_ADMIN, users);
if res <> 0 then
Memo1.Lines.Add('Ошибка при получении списка администраторов! Код ошибки: ' + IntToStr(res))
else
Memo1.Lines.Assign(users);
finally
users.Free;
end;
end;
Альтернативный ответ
В дополнение к использованию NetUserEnum, можно также рассмотреть другие методы, такие как QuerySecurityInfo для проверки прав доступа к определенным объектам в системе. Однако, в рамках данной статьи, мы сосредоточимся на решении с использованием NetUserEnum, так как оно является прямым и эффективным способом получения информации о пользователях и их правах.
Подтвержденный ответ
Использование функции NetUserEnum с указанием структуры USER_INFO_2 позволяет получить список пользователей с указанием их привилегий. Это решение позволяет избежать необходимости входа в каждую учетную запись для проверки прав администратора.
Таким образом, разработчики, использующие Delphi, могут эффективно решать задачи, связанные с управлением учетными записями и проверкой прав пользователей в операционных системах на базе Windows.
Описание контекста: В статье рассматривается проверка прав администратора для учетных записей пользователей в Delphi, используя функцию `NetUserEnum` для перечисления учетных записей с указанием уровня привилегий.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.