Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > Общие вопросы .NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.04.2012, 16:36   #1
ds.Dante
Старожил
 
Аватар для ds.Dante
 
Регистрация: 06.08.2009
Сообщений: 2,992
По умолчанию Настройка сетевухи через WMI

Пытаюсь сделать программу, которая сбрасывает настройку скорости/дуплексности сетевухи на автосогласование. Сейчас я делаю это так:

1) Выбираю нужный NetworkInterface.Description, в котором обычно фигурирует название сетевухи
2) Ищу это устройство в реестре
3) Нахожу параметр устройства, смахивающее на скорость и пытаюсь угадать значение по умолчанию
4) Пытаюсь выцепить из реестра или через WMI соответстующий device/vendor ID
5) Передаю этот ID какому-то левому коду, который перезапускает устройство, чтобы новые настройки вступили в силу

Программа работает для большинства сетевух (т. е. для Realtek ), но хочется сделать надёжнее, полностью через WMI. Пока я нашёл только как получить информацию о сетевых картах:
Код:
var searcher = new ManagementObjectSearcher ("SELECT * FROM Win32_NetworkAdapter");
foreach (ManagementObject manObject in searcher.Get ())
    Console.WriteLine (manObject["Speed"] ?? "n/a");
Как через WMI можно изменить настройки адаптера и отключить/включить устройство? В документации Win32_NetworkAdapter все поля помечены только для чтения.
ds.Dante вне форума Ответить с цитированием
Старый 09.04.2012, 16:49   #2
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

http://msdn.microsoft.com/en-us/library/aa390385.aspx
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 09.04.2012, 17:21   #3
ds.Dante
Старожил
 
Аватар для ds.Dante
 
Регистрация: 06.08.2009
Сообщений: 2,992
По умолчанию

Во, один кусочек пазла подошёл.

Теперь надо задать автосогласование. Я запустил на пробу такой код:
Код:
if (manObject["Manufacturer"] as string == "Realtek")
{
	manObject.SetPropertyValue ("Speed", "10000000");
	manObject.Put ();
	manObject.InvokeMethod ("Disable", null);
	manObject.InvokeMethod ("Enable", null);
}
только он ни на что не влияет (просто перезапускает устройство).

Ещё проблема: в справке к Win32_NetworkAdapter написано, что свойство AutoSense пока не реализовано. А мне нужно именно оно.

Последний раз редактировалось ds.Dante; 09.04.2012 в 17:23.
ds.Dante вне форума Ответить с цитированием
Старый 09.04.2012, 19:51   #4
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

...может задействовать devcon?
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 10.04.2012, 09:10   #5
ds.Dante
Старожил
 
Аватар для ds.Dante
 
Регистрация: 06.08.2009
Сообщений: 2,992
По умолчанию

DevCon работает с устройствами на более высоком уровне: может их включить, отключить, установить, сжечь...

Установку скорости всё-таки придётся корячить через реестр.

Upd: если кому нужно - программа, выводящая информацию об устройстве для определённого подключения или для всех оптом (можно выбрать только первые 9 пунктов ).

Код:
using System;
using System.Management;
using System.Net.NetworkInformation;

class Program
{
	static void Main ()
	{
		try
		{
			Console.WriteLine ("Select connection:");
			Console.WriteLine ("1 - Show all network devices");
			Console.WriteLine ("2 - Show all physical network devices");
			var connections = NetworkInterface.GetAllNetworkInterfaces ();
			for (int i = 0; i < connections.Length; i++)
				Console.WriteLine ("{0} - {1} ({2})", i+3, connections[i].Name, connections[i].Description);
			Console.WriteLine ();

			int choosed = Console.ReadKey (true).Key - ConsoleKey.D0;
			if (choosed < 1 || choosed > connections.Length + 2)
				return;

			string query = "SELECT * FROM Win32_NetworkAdapter";
			if (choosed == 2)
				query += " WHERE PhysicalAdapter = True";
			if (choosed > 2)
			{
				NetworkInterface connection = connections[choosed-3];
				query += " WHERE GUID = \"" + connection.Id + "\"";
				Console.WriteLine ("Choosed:");
				Console.WriteLine ("Name: " + connection.Name);
				Console.WriteLine ("Description: " + connection.Description);
				Console.WriteLine ("Interface type: " + connection.NetworkInterfaceType);
				Console.WriteLine ("ID: " + connection.Id);
				Console.WriteLine ("Speed: " + connection.Speed);
				Console.WriteLine ("MAC adress: " + connection.GetPhysicalAddress ());
				Console.WriteLine ("Operational status: " + connection.OperationalStatus);
				Console.WriteLine ();
			}

			ManagementObjectSearcher searcher = new ManagementObjectSearcher (query);
			searcher.Options.Timeout = new TimeSpan (0, 0, 3);

			var found = searcher.Get ();
			if (found.Count == 0)
				Console.WriteLine ("No adapters found");

			foreach (ManagementObject manObject in found)
			{
				foreach (var property in manObject.Properties)
					Console.WriteLine ("{0}: {1}", property.Name, property.Value ?? "n/a");

				Console.WriteLine ();
			}
		}
		catch (Exception e)
		{
			Console.WriteLine ();
			Console.WriteLine (e);
		}

		Console.WriteLine ("Press any key...");
		Console.ReadKey (true);
	}
}

Последний раз редактировалось ds.Dante; 10.04.2012 в 11:42.
ds.Dante вне форума Ответить с цитированием
Старый 11.04.2012, 00:30   #6
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

DevCon работает на уровне SetupAPI, рыть в сторону SetupDiGetClassDevs. Да, через реестр проще.
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
настройка ЧПУ через htaccess ajevgen WordPress и другие CMS 0 09.04.2012 13:07
Серийный номер hdd через wmi xil C# (си шарп) 3 08.09.2011 12:04
Настройка WinXP через *.bat Pixy Windows 2 02.11.2009 20:21
Настройка Windows через реестр GAGARIN-NEW Windows 9 13.07.2009 14:30
MAC сетевухи. Небесный Работа с сетью в Delphi 7 12.07.2008 17:01