Программно отключить / включить сетевой интерфейс

Я пытаюсь найти решение для программного включения / выключения сетевой карты - я провел массу исследований, и ничто не кажется работоспособным решением как в средах XP, так и в Vista. Я говорю о том, что если вы зашли в панель управления «Сетевые подключения», щелкнули по ней правой кнопкой мыши и выбрали «включить» или «отключить». В идеале я хотел бы использовать библиотеку, но если хуже станет хуже, я предположил, что могу обратиться к приложению командной строки, но это абсолютно худший случай. Вот что я пробовал до сих пор и где / почему они потерпели неудачу:

Этот предыдущий пост:

Как программно включить / отключить сетевые интерфейсы? (Windows XP)

Перечисляет несколько методов - первый использует netsh, что похоже на использование функции IPHelper SetIfEntry (). Проблема с этим заключается в том, что он устанавливает интерфейс как включенный или отключенный административно, а не как обычный включенный / отключенный, поэтому он фактически не закрывает сетевой адаптер.

Другое предлагаемое решение заключается в использовании WMI и, в частности, класса Win32_NetworkAdapter, который имеет метод Enable и Disable:

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

Отлично верно? Работает нормально в Vista, эти методы не существуют в обычной установке XP ...

Другим предложением является использование DevCon, который действительно использует SetupAPI, в частности SetupDiSetClassInstallParams () с DICS_ENABLE. Проведя бесчисленные часы с этим замечательным классом и попытавшись отключить / включить устройство как на глобальном уровне, так и на определенном уровне конфигурации (и каждой комбинации), оно также не всегда работает - иногда работает нормально, но иногда отключение устройства в диспетчере устройств, но при этом оставление его работоспособным в сетевых подключениях.

Затем я попытался использовать интерфейс INetConnection, в частности INetConnection-> Connect / Disconnect:

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

Но я так и не смог добиться того, чтобы это оказало какое-либо влияние на соединения в моих тестовых системах Vista или XP.

Наконец, я нашел этот C # скрипт с именем ToggleNic:

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

Похоже, что он как-то проходит через Shell, чтобы эффективно вызывать поведение правой кнопки мыши Ограничение (по крайней мере, этой реализации) состоит в том, что он не работает (без модификации) в неанглийских системах, с которыми мне нужно работать. Если честно, это решение выглядит наиболее жизнеспособным, но мое знакомство с C # низкое, и я не смог найти, доступен ли API, который он использует, в C ++.

Будем весьма благодарны за любую помощь или советы - или за идеи о том, как выполнить то, что делает скрипт togglenic в C ++. Спасибо!