Переменная List заполняется списком доменов. Функция возвращает код ошибки обращения к сети.
function FillNetLevel(xxx: PNetResource; list: TStrings): Word;
type
PNRArr = ^TNRArr;
TNRArr = array[0..59] of TNetResource;
var
x: PNRArr;
tnr: TNetResource;
I: integer;
EntrReq,
SizeReq,
twx: Integer;
WSName: string;
begin
Result := WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_ANY,
RESOURCEUSAGE_CONTAINER, xxx, twx);
if Result = ERROR_NO_NETWORK then
Exit;
if Result = NO_ERROR thenbegin
New(x);
EntrReq := 1;
SizeReq := SizeOf(TNetResource) * 59;
while (twx < > 0) and
(WNetEnumResource(twx, EntrReq, x, SizeReq) <> ERROR_NO_MORE_ITEMS) dobeginfor i := 0 to EntrReq - 1 dobegin
Move(x^[i], tnr, SizeOf(tnr));
case tnr.dwDisplayType of
RESOURCEDISPLAYTYPE_DOMAIN:
beginif tnr.lpRemoteName < > '' then
WSName := tnr.lpRemoteName
else
WSName := tnr.lpComment;
list.Add(WSName);
end;
else
FillNetLevel(@tnr, list);
end;
end;
end;
Dispose(x);
WNetCloseEnum(twx);
end;
end;
Функция Delphi, именуемая FillNetLevel, пополняет список доменов с помощью Windows Network API. Вот подробное описание того, что код делает:
Подпись функции
Функция принимает два параметра:
* xxx: Указатель на структуру PNetResource, которая представляет собой сетевой ресурс.
* list: Объект TStrings, который используется для хранения списка доменов.
Функция возвращает целочисленное значение, указывающее статус ошибки операции. В частности, она возвращает код ошибки Windows (например, ERROR_NO_NETWORK, NO_ERROR и т.д.).
Основной логик
Функция сначала вызывает WNetOpenEnum для открытия перечисления сетевых ресурсов. Если результат равен ERROR_NO_NETWORK, функция выходит из программы сразу.
Если результат равен NO_ERROR, функция выделяет память для массива из 60 структур TNetResource с помощью New. Затем она настраивает переменные для отслеживания количества записей и размера каждой записи.
Функция затем вступает в цикл, который продолжается до тех пор, пока не будут доступны более сетевых ресурсов (то есть WNetEnumResource возвращает ERROR_NO_MORE_ITEMS). В каждом шаге цикла она:
1. Перемещает данные из массива в локальную переменную TNetResource, называемую tnr.
2. Проверяет, является ли тип отображения ресурса RESOURCEDISPLAYTYPE_DOMAIN. Если да:
* Извлекает имя домена из поля lpRemoteName или комментария из поля lpComment (если lpRemoteName пуст).
* Добавляет извлеченное имя домена в список с помощью list.Add.
3. Рекурсивно вызывает функцию FillNetLevel для любых подресурсов, найденных в tnr. Это позволяет функции обследовать иерархию сетевых ресурсов.
После обработки всех ресурсов функция освобождает выделенную память с помощью Dispose, закрывает перечисление с помощью WNetCloseEnum и возвращает статус ошибки.
Функция FillNetLevel позволяет получить список доменов на компьютере, подключенных к сети, и возвращает код ошибки при обращении к сети.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.