C++ C++ C# C# ASP.NET Security ASP.NET Security ASM ASM Скачать Скачать Поиск Поиск Хостинг Хостинг  
  Программа для работы с LPT портом...
Язык: .NET — ©Alexey...
  "ASP.NET Atlas" – AJAX в исполнении Micro...
Язык: .NET — ©legigor@mail.ru...
  "Невытесняющая" Многопоточность...
Язык: C/C++ — ©...
  01.05.2010 — Update World C++: Сборник GPL QT исходников
  15.12.2007 — Весь сайт целиком можно загрузить по ссылкам из раздела Скачать
Хостинг:
Windows 2003, ASP.NET 2.0
бесплатный и от 80 руб./мес


   Отправить письмо
Кулабухов Артем, Беларусь




 137 - Исследуем сеть (WNetOpenEnum, WNetCloseEnum) / Win 32 API / Win32 API

Шаг 137 - Исследуем сеть (WNetOpenEnum, WNetCloseEnum)

При программировании данной задачи в Windows 98 можно использовать функции Windows Networking (WNet), что мы с Вами и сделаем. Все начинается с функции WNetOpenEnum. Эта функция отрывает указатель, с помощью которого можно изучать сеть. Давайте ее посмотрим.

DWORD WNetOpenEnum
(  
	DWORD dwScope,			// определяет возможности перечисления
	DWORD dwType,			// тип ресурса для перечисления
	DWORD dwUsage,			// тип использования для перечисления
	LPNETRESOURCE lpNetResource,	// структура для информации о ресурсу
	LPHANDLE lphEnum			// указатель на перечислитель
);

Давайте посмотрим параметры dwScope:

  • RESOURCE_CONNECTED - перечисляются все подключенные ресурсы, dwUsage игнорируется
  • RESOURCE_CONTEXT - перечисляются все ресурсы в контексте сети, dwUsage игнорируется
  • RESOURCE_GLOBALNET - перечисляются все ресурсы сети
  • RESOURCE_REMEMBERED - перечисляются все постоянные связи, dwUsage игнорируется

Следующий флаг - это dwType:

  • RESOURCETYPE_ANY - все ресурсы
  • RESOURCETYPE_DISK - все диски
  • RESOURCETYPE_PRINT - все принтеры

Флаг dwUsage используется только при перечислении всех ресурсов:

  • 0 - все ресурсы
  • RESOURCEUSAGE_CONNECTABLE - все подключенные ресусры
  • RESOURCEUSAGE_CONTAINER - все ресурсы контейнеры
  • RESOURCEUSAGE_ATTACHED - запрещает перечислять без аутентификации
  • RESOURCEUSAGE_ALL - объединяет флаги RESOURCEUSAGE_CONNECTABLE, RESOURCEUSAGE_CONTAINER и RESOURCEUSAGE_ATTACHED.

Если lpNetResource равен нулю, то для перечисления будет начинаться с самого верха сети. В другом случае этот параметр должен быть заполнен. При успешном выполнении функция вернет NO_ERROR.

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

DWORD WNetCloseEnum
(  
	HANDLE hEnum	// указатель на перечислитель
);

В случае успеха функция вернет NO_ERROR. Вот пример кода для начала перечисления.

void CEasyEnumNetResourceAbstract::OpenEnum()
{
	dwResult = WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_ANY, 0, NULL, &hEnum); 
	if (dwResult != NO_ERROR)
		throw CString("Error OpenEnum");
	GetResource();
	dwResult = WNetCloseEnum(hEnum);
	if (dwResult != NO_ERROR)
		throw CString("Error OpenEnum");
}

Все, что нужно здесь - это указатель на перечислитель:

class CEasyEnumNetResourceAbstract  
{
	......
	DWORD 		dwResult;		// для результата
	HANDLE 		hEnum;		// указатель на ресурсы
	LPNETRESOURCE	netRc;
	......
};

Функция GetResource специально сделана внутри функции OpenEnum для получения функционального замыкания. В этом классе она виртуальная и не имеем кода. В следующем шаге будет проект с полными кодами функций так что не волнуйтесь про реализацию. А сейчас главное это понять принцип. Открыли перечисление здесь нужно указать типы ресурсов и с какого места в сети мы будет их перечислять. Потом что-то перечислили и закрыли.


| |
Автор Каев Артем.
[AD]