VR
Virtual Reality On-line   Журнал
Новости   |     Журнал    |    Хаkер    |     Магазин   |   Проекты
[   Вход    ]
[Kарта сайтa]

[ Download  ]
[  Конкурс  ]
[ Анекдоты  ]
[  Ссылки   ]
[  Реклама  ]
[ Почтальон ]
[ О проекте ]






TopList
Программирование гнёзд.
Первая программа для работы с гнёздами
:

Сегодня я продолжу рассказывать о функциях для работы с гнёздами. Возьми исходники проги, по которой мы будем обучаться здесь. Программа вытаскивает сведения о структуре сети. Функции из этой программы я ещё не рассматривал, поэтому новой инфы тебе будет достаточно. Меня очень сильно поругали за то, что примеры я даю на Delphi, а функции в этом разделе описываются в стандарте языка С++. Ну что поделаешь если я привык сетевые функции так описывать. Сегодня я решил исправиться, все функции будут описываться в стандарте Delphi, как я это делаю в других статьях журнала.
Logo
Рис 1. Форма

Ты можешь полюбоваться результатом работы сегодняшней проги на рисунке 1. А я перехожу к рассмотрению кода. Я не буду объяснять работу каждой строчки, как в других статьях, а объясню только сетевые функции. Если ты читал другие мои статьи и имеешь представление о Delphi, то с работой программы сможешь разобраться сам.

function WNetOpenEnum(
dwScope, dwType, dwUsage: DWORD;
lpNetResource: PNetResource; 
var lphEnum: Thandle
): DWORD; stdcall;

Эта функция запускается у меня первой. Она открывает перечисление сетевых устройств в локальной сети. Рассмотрим передаваемые ей параметры:

  • dwScope - Какие ресурсы будут включаться в перечисление. Возможны комбинации следующих значений:
    • RESOURCE_GLOBALNET - все ресурсы сети;
    • RESOURCE_CONNECTED - подключённые;
    • RESOURCE_REMEMBERED - запомненные;
  • dwType - тип ресурсов включаемых в перечисления. Возможны комбинации следующих значений:
    • RESOURCETYPE_ANY - все ресурсы сети;
    • RESOURCETYPE_DISK - сетевые диски;
    • RESOURCETYPE_PRINT - сетевые принтеры;
  • dwUsage - использование ресурсов включаемых в перечисления. Возможны значения:
    • 0 - все ресурсы сети;
    • RESOURCEUSAGE_CONNECTABLE - подключаемые;
    • RESOURCEUSAGE_CONTAINER- контейнерные;
  • lpNetResource - Указатель на структуру NETRESOURCE . Если этот параметр равен нулю, то перечисление начнётся с самой верхней ступени иерархии сетевых ресурсов. Ноль я ставлю для того, чтобы получить самый первый ресурс. После этого я передаю в качестве этого параметра указатель на уже найденный ресурс. Тогда перечисление начнётся с найденного и продолжится дальше. Так я повторяю, пока не найдутся все ресурсы.
  • lphEnum - Это указатель, который понадобится в функции WnetEnumResource

Теперь нужно рассмотреть структуру NETRESOURCE . В Delphi есть три разновидности этой функции: NETRESOURCE, NETRESOURCEА и NETRESOURCEW. Отличаются они последней буквой в названии и типом строк.

  _NETRESOURCEA = packed record
    dwScope: DWORD;
    dwType: DWORD;
    dwDisplayType: DWORD;
    dwUsage: DWORD;
    lpLocalName: PAnsiChar;
    lpRemoteName: PAnsiChar;
    lpComment: PAnsiChar;
    lpProvider: PAnsiChar;

Что такое dwScope, dwType и dwUsage ты уже знаешь, поэтому их я опускаю. А вот остальные я рассмотрю.

  • dwDisplayType - Как должен отображаться ресурс:
    • RESOURCEDISPLAYTYPE_DOMAIN - это домен;
    • RESOURCEDISPLAYTYPE_GENERIC - нет значения;
    • RESOURCEDISPLAYTYPE_SERVER - сервер;
    • RESOURCEDISPLAYTYPE_SHARE - разделяемый ресурс;
  • lpLocalName - локальное имя
  • lpRemoteName - удалённое имя
  • lpComment - комментарий
  • lpProvider - Хозяин ресурса. Параметр может быть 0, если хозяин неизвестен.

Теперь можно переходить к следующей функции:

function WNetEnumResource(
hEnum: THandle; var lpcCount: DWORD;
lpBuffer: Pointer; 
var lpBufferSize: DWORD
): DWORD; stdcall;
  • hEnum - указатель на возвращённое функцией WNetOpenEnum значение.
  • lpcCount - максимальное количество возвращаемых значений. Не стесняйся, ставь 2000. Если ты засунешь сюда 0xFFFFFFFF, то перечисляться все ресурсы. После выполнения, функция засунет сюда фактическое число найденных ресурсов.
  • lpBuffer - указатель на буфер, в который будет помещён результат.
  • lpBufferSize -Размер буфера.

После вызова этой функции, я добавляю найденные ресурсы с помощью:

NewNode := ShowResource(ParentNode, ResourceBuffer[i]);

ShowResource выглядит вот так:

function ShowResource(const ParentNode: TTreeNode; 
  Res: TNetResource): TTreeNode;
 var
  Str:String;
  index:Integer;
 begin
  Result:=ParentNode;
  if Res.lpRemoteName=nil then exit;
  Str:=string(Res.lpRemoteName);
  index:=Pos('\',Str);
  While index>0 do
   begin
    Str:=Copy(Str,index+1,Length(Str));
    index:=Pos('\',Str);
   end;
  Result := TreeTreeRes.Items.AddChild(ParentNode, Str);
 end;

Всё очень просто и со вкусом. На сегодня хватит. Поговорим о сетях в следующем номере.

Удачи тебе.

 Исходники примера забирай здесь


Design by FMk group ©
Copyright©: Horrific aka Флёнов Михаил ©