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

Получить список пользователей

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

Получить список пользователей

Автор: Кондратюк Виталий

Нас Reboot, а мы крепчаем.

GetLocalUserList - возвращает список пользователей (Windows NT, Windows 2000)


unit Func;

interface

uses Sysutils, Classes, Stdctrls, Comctrls, Graphics, Windows;

////////////////////////////////////////////////////////////////////////////////
{$EXTERNALSYM NetUserEnum}
function NetUserEnum(servername: LPWSTR;

  level,
  filter: DWORD;
  bufptr: Pointer;
  prefmaxlen: DWORD;
  entriesread,
  totalentries,
  resume_handle: LPDWORD): DWORD; stdcall;
external 'NetApi32.dll' Name 'NetUserEnum';

function NetApiBufferFree(Buffer: Pointer {LPVOID}): DWORD; stdcall;

external 'NetApi32.dll' Name 'NetApiBufferFree';
////////////////////////////////////////////////////////////////////////////////

procedure GetLocalUserList(ulist: TStringList);

implementation

//------------------------------------------------------------------------------
// возвращает список пользователей локального хоста
//------------------------------------------------------------------------------

procedure GetLocalUserList(ulist: TStringList);
const

  NERR_SUCCESS = 0;
  FILTER_TEMP_DUPLICATE_ACCOUNT = $0001;
  FILTER_NORMAL_ACCOUNT = $0002;
  FILTER_PROXY_ACCOUNT = $0004;
  FILTER_INTERDOMAIN_TRUST_ACCOUNT = $0008;
  FILTER_WORKSTATION_TRUST_ACCOUNT = $0010;
  FILTER_SERVER_TRUST_ACCOUNT = $0020;

type

  TUSER_INFO_10 = record
    usri10_name,
      usri10_comment,
      usri10_usr_comment,
      usri10_full_name: PWideChar;
  end;
  PUSER_INFO_10 = ^TUSER_INFO_10;

var

  dwERead, dwETotal, dwRes, res: DWORD;
  inf: PUSER_INFO_10;
  info: Pointer;
  p: PChar;
  i: Integer;
begin

  if ulist = nil then
    Exit;
  ulist.Clear;

  info := nil;
  dwRes := 0;
  res := NetUserEnum(nil,
    10,
    FILTER_NORMAL_ACCOUNT,
    @info,
    65536,
    @dwERead,
    @dwETotal,
    @dwRes);
  if (res <> NERR_SUCCESS) or (info = nil) then
    Exit;
  p := PChar(info);
  for i := 0 to dwERead - 1 do
  begin
    inf := PUSER_INFO_10(p + i * SizeOf(TUSER_INFO_10));
    ulist.Add(WideCharToString(PWideChar((inf^).usri10_name)));
  end;

  NetApiBufferFree(info);
end;

end.

Here is the translation of the content into Russian:

Программа на Delphi, которая извлекает список локальных пользователей на компьютере Windows с помощью функции NetUserEnum из библиотеки NetApi32.dll.

Разбивка кода:

Единицы и интерфейсы

Программа начинается с объявления нескольких единиц (библиотек) и интерфейсов:

unit Func;
interface
uses Sysutils, Classes, StdCtrls, ComCtrls, Graphics, Windows;

Эти единицы предоставляют различные функциональности, такие как системные утилиты, классы, стандартные контролы, COM-контроли, графику и функции Windows API.

Функция NetUserEnum

Функция NetUserEnum объявлена с следующим сигнатурой:

function NetUserEnum(servername: LPWSTR;
  level, filter: DWORD;
  bufptr: Pointer;
  prefmaxlen: DWORD;
  entriesread, totalentries, resume_handle: LPDWORD): DWORD; stdcall;

Эта функция извлекает список пользователей на компьютере Windows. Она принимает несколько параметров:

  • servername: Имя сервера для запроса (в этом случае nil указывает на локальный компьютер).
  • level: Уровень детализации информации о пользователях.
  • filter: Значение фильтра, которое specifies which types of users to include in the list.
  • bufptr: Указатель на буфер, где будет храниться информация о пользователях.
  • prefmaxlen: Максимальная длина каждого входа в списке пользователей.
  • entriesread, totalentries и resume_handle - параметры вывода.

Функция возвращает код ошибки, который проверяется на успех (NERR_SUCCESS).

Функция NetApiBufferFree

Эта функция используется для освобождения памяти, выделенной функцией NetUserEnum:

function NetApiBufferFree(Buffer: Pointer {LPVOID}): DWORD; stdcall;

Она принимает указатель на буфер и возвращает код ошибки.

Процедура GetLocalUserList

Главная процедура, GetLocalUserList, объявлена следующим образом:

procedure GetLocalUserList(ulist: TStringList);

Эта процедура извлекает список локальных пользователей на компьютере и хранит его в параметре ulist, который является объектом TStringList.

Имплементация

Секция реализации определяет несколько констант, типов и переменных:

const
  NERR_SUCCESS = 0;
  FILTER_TEMP_DUPLICATE_ACCOUNT = $0001;
  FILTER_NORMAL_ACCOUNT = $0002;
  FILTER_PROXY_ACCOUNT = $0004;
  FILTER_INTERDOMAIN_TRUST_ACCOUNT = $0008;
  FILTER_WORKSTATION_TRUST_ACCOUNT = $0010;
  FILTER_SERVER_TRUST_ACCOUNT = $0020;

type
  TUSER_INFO_10 = record
    usri10_name,
    usri10_comment,
    usri10_usr_comment,
    usri10_full_name: PWideChar;
  end;
  PUSER_INFO_10 = ^TUSER_INFO_10;

var
  dwERead, dwETotal, dwRes, res: DWORD;
  inf: PUSER_INFO_10;
  info: Pointer;
  p: PChar;
  i: Integer;

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

Процедура использует следующие переменные:

  • ulist: Объект TStringList, который будет хранить список локальных пользователей.
  • info: Указатель на буфер, выделенный функцией NetUserEnum.
  • dwERead, dwETotal и dwRes: Параметры вывода для количества прочитанных записей, общего количества записей и кода ошибки соответственно.
  • inf: Указатель на запись TUSER_INFO_10, которая хранит информацию о пользователе.
  • p: Указатель на массив символов.
  • i: Целочисленная индекс.

Процедура выполняет следующие шаги:

  1. Очищает объект ulist.
  2. Выделяет буфер с помощью функции NetUserEnum.
  3. Проверяет, была ли выделена память успешно, и выходит, если нет.
  4. Перебирает записи пользователей в буфере, хранит каждую запись как строку в объекте ulist.
  5. Освобождает память, выделенную функцией NetUserEnum.

В целом, эта программа предоставляет простой способ извлечения списка локальных пользователей на компьютере Windows с помощью функции NetUserEnum из библиотеки NetApi32.dll.

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


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

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




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


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


реклама


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

Время компиляции файла: 2024-12-22 20:14:06
2025-06-16 00:45:33/0.0034711360931396/0