Estoy haciendo unas prueba y necesito usando .NET habilitar y deshabilitar un adaptador de red.
Hasta ahora, utilizando la clase NetworkInterface dentro de System.Net.NetworkInformation.
Hice esto para obtener los nombres de los adaptadores y su dirección MAC (registrados en Windows)
Código
public static List<string> GetDevices() { foreach (NetworkInterface nic in NetworkInterface.GetAllNetworkInterfaces()) { PhysicalAddress address = nic.GetPhysicalAddress(); if((nic.NetworkInterfaceType != NetworkInterfaceType.Tunnel) && !string.IsNullOrEmpty(address.ToString())) nDevicesList.Add("Mac: {0} NetAdapter: {1}", address.ToString(), nic.Description); } return nDevicesList; }
Hasta ahí todo bien.
El problema ahora es que quiero poder seleccionar un adaptador y hacerle como un Reset, o sea, deshabilitarlo y luego habilitarlo.
Después de buscar información, me encontré con una manera de hacerlo utilizando la clase WMI -> Win32_NetworkAdapter, que además de estar deprecada, para los sistemas operativos Windows 2003, Windows XP, Windows 2000 y Windows NT 4.0 no tiene disponible los métodos Enable y Disable.
Lo cual no me será factible para esos SO.
Como alternativa a esta clase deprecada está la MSFT_NetAdapter pero tampoco, pues el menor cliente soportado es Windows 8.
También estuve leyendo sobre una forma de hacerlo utilizando netsh e hice esto:
Código
static void Enable(string interfaceName) { ProcessStartInfo psi = new ProcessStartInfo("netsh", "interface set interface \"" + interfaceName + "\" enable"); p.StartInfo = psi; p.Start(); } static void Disable(string interfaceName) { ProcessStartInfo psi = new ProcessStartInfo("netsh", "interface set interface \"" + interfaceName + "\" disable"); p.StartInfo = psi; p.Start(); }
Lo cual no se si lo habré programado bien, pero no me funcionó (ni en Windows 8.1 ni en Windows XP SP2)
Luego me encontré con una clase en CodeProject:
http://www.codeproject.com/Articles/21503/Hardware-Helper-Library-for-C
La cual lista todos los dispositivos en el administrador de dispositivos (solo funciona en Windows XP), utilizando hooks a nivel de sistema. Esta clase esta pensada pensada para recibir notificaciones de los eventos de añadir y quitar dispositivos, y tiene la funcionalidad de habilitarlos o desahibilitarlos.
Nota: Esta clase tiene un poco de unamanged code con el cual no estoy familiarizado (aún)
Imagino que puedo hacer un cross-reference con el método que hice para saber los adaptadores de red y solo capturar esos utilizando esta clase, pero todavía me queda el problema de que debo tener código para distintas versiones de Windows.
¿Que debería hacer?
¿Hacer código para distintas versiones de Windows?
¿Existe alguna vía de habilitar/deshabilitar los adaptadores de red de alguna manera que funcione en todos los SO? (me da a que no, pero quizás me puedan corroborar o refutar mi idea?
Agradezco cualquier sugerencia/idea/crítica.
Salu2s
Edito:
PD: También sé que está la utilidad devcon.exe, pero quiero evitar esto por ahora.