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 руб./мес


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




 138 - Исследуем сеть - список клиентов / Win 32 API / Win32 API

Шаг 138 - Исследуем сеть - список клиентов

Итак, в самом верху сети у нас находятся клиенты для сетей. Именно они поставляют сетевые ресурсы. Подробнее про них Вы можете почитать в разделе Windows. Мы с Вами попробуем программно их получить. Для этого у нас есть функция WNetEnumResource():

DWORD WNetEnumResource
( 
	HANDLE hEnum,		// указатель на ресурсы
	LPDWORD lpcCount,		// сколько перечислят и результат перечисления
	LPVOID lpBuffer,		// указатель на буфер
	LPDWORD lpBufferSize	// размер буфера
);

Если в lpcCount указать -1, то будут перечисляться все возможные ресурсы. В буфер будут помещаться результаты. Размер нужно установить достаточный. Где-то читал, что 16 KB - это удачный выбор. При успешном выполнении может вернуть NO_ERROR или ERROR_NO_MORE_ITEMS, что значит нет вхождений. Функция получения списка клиентов будет выглядеть вот так:

void CEasyEnumProvider::GetResource()
{
	do 
	{
		dwResult = WNetEnumResource(hEnum,&cEntries,netRc,&cbBuffer);
		if( dwResult == NO_ERROR )
		{
			LPNETRESOURCE temp;
			temp=&netRc[0];
			cArray.Add(temp->lpProvider); 
		}
		else break;
	}while( dwResult != ERROR_NO_MORE_ITEMS );
}

Получаем ресурс и пока есть элементы dwResult != ERROR_NO_MORE_ITEMS берем имя провайдера и складываем в массив. Только сначала нужно инициализировать массив и переменные. Вот так:

CEasyEnumNetResourceAbstract ::CEasyEnumNetResourceAbstract ()
{
	cEntries = -1 ;		// для всех ресурсов
	cbBuffer = 16384;		// размер буфера
	netRc=0;
	netRc = (LPNETRESOURCE) GlobalAlloc(GPTR, cbBuffer);
}

CEasyEnumNetResourceAbstract ::~CEasyEnumNetResourceAbstract ()
{
	GlobalFree((HGLOBAL)netRc);
}

CEasyEnumProvider я породил от CEasyEnumNetResourceAbstract, в котором там производится иницализация переменных открытие перечислителя и все такое. В CEasyEnumProvider всего одна функция GetResource. А вот так это используется:

#include "stdafx.h"
#include "iostream.h"
#include "EasyEnumNetResource.h"

void main()
{
	try
	{
		CEasyEnumProvider ce;
		ce.OpenEnum(); 
		int x=ce.GetCount();
		for (int i=0;i<x;i++) 
			cout << ce.GetString(i) << endl;  
	}
	catch(CString s)
	{
		cout << s;
	}
}

Полный пример кодов в проекте. В результате работы программы на экране будет список доступных клиентов на компьютере, с которого запущена эта программа.

138_1.gif (6427 b)


Загрузить проект | | |
Автор Каев Артем.
[AD]