Programáticamente deshabilitar / habilitar la interfaz de red

Estoy tratando de encontrar una solución para habilitar / deshabilitar mediante programación la tarjeta de red. He investigado mucho y nada parece ser una solución viable tanto en entornos XP como en Vista. De lo que estoy hablando es si ingresó al Panel de control 'Conexiones de red', hizo clic derecho en uno y seleccionó habilitar o deshabilitar. Idealmente, me gustaría usar una biblioteca, pero si las cosas empeoran, supongo que podría llamar a una aplicación de línea de comandos, pero ese es el peor de los casos. Esto es lo que he intentado hasta ahora y dónde / por qué fallaron:

Esta publicación anterior:

¿Cómo habilitar / deshabilitar mediante programación las interfaces de red? (Windows XP

Enumera un par de métodos: el primero es usar netsh, que parece ser lo mismo que usar la función IPHelper SetIfEntry (). El problema con esto es que establece la interfaz como Administrativamente habilitada o deshabilitada, no la habilitada / deshabilitada normal, por lo que en realidad no apaga la NIC.

Otra solución propuesta es utilizar WMI y, en particular, la clase Win32_NetworkAdapter, que tiene un método de activación y desactivación:

http: //msdn.microsoft.com/en-us/library/aa394216 (VS.85) .aspx

Genial ¿verdad? Funciona bien en Vista, esos métodos no existen en una instalación XP normal ...

Otra sugerencia es usar DevCon, que realmente usa SetupAPI, en particular SetupDiSetClassInstallParams () con DICS_ENABLE. Después de pasar incontables horas con esta maravillosa clase e intentar deshabilitar / habilitar el dispositivo tanto a nivel global como a nivel de configuración específica (y cada combinación), tampoco funciona de manera consistente, a veces funciona bien, pero otras veces deshabilitar el dispositivo en el Administrador de dispositivos, pero aún así dejarlo en funcionamiento en las Conexiones de red.

uego intenté usar la interfaz INetConnection, específicamente INetConnection-> Connect / Disconnect:

http: //msdn.microsoft.com/en-us/library/aa365084 (VS.85) .aspx

Pero nunca pude lograr que esto tuviera ningún efecto en las conexiones en mis cajas de prueba Vista o XP.

Finalmente, encontré este script de C # llamado ToggleNic:

http: //channel9.msdn.com/playground/Sandbox/154712

Lo que parece que está pasando por el Shell de alguna manera para causar efectivamente el comportamiento del clic derecho. La limitación (al menos de esta implementación) es que no funciona (sin modificación) en sistemas que no están en inglés, con lo que necesito el mío para trabajar. Para ser justos, esta solución parece la más viable, pero mi familiaridad con C # es baja y no pude encontrar si la API que está usando está disponible en C ++.

Cualquier ayuda o información sería muy apreciada, o ideas sobre cómo lograr lo que hace el script togglenic en C ++. ¡Gracias