Desativar / ativar programaticamente a interface de rede

Estou tentando encontrar uma solução para ativar / desativar programaticamente a placa de rede - fiz muitas pesquisas e nada parece ser uma solução viável nos ambientes XP e Vista. O que eu estou falando é que, se você foi ao Painel de Controle 'Conexões de Rede', clicou com o botão direito do mouse e escolheu ativar ou desativar. Idealmente, eu gostaria de usar uma biblioteca, mas se piorar, acho que poderia chamar um aplicativo de linha de comando, mas esse é o pior caso possível. Aqui está o que eu tentei até agora e onde / por que eles falharam:

Este post anterior:

Como ativar / desativar programaticamente as interfaces de rede? (Windows XP)

Lista alguns métodos - o primeiro é usar netsh, que parece ser o mesmo que usar a função IPHelper SetIfEntry (). O problema é que ele define a interface como habilitada ou desabilitada administrativamente, não como a habilitada / desabilitada normalmente, para que não desligue a NI

Outra solução proposta é usar o WMI e, em particular, a classe Win32_NetworkAdapter, que possui o método Enable and Disable:

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

Grande certo? Funciona bem no Vista, esses métodos não existem em uma instalação normal do XP ...

Outra sugestão é usar o DevCon, que realmente usa o SetupAPI, em particular SetupDiSetClassInstallParams () com o DICS_ENABLE. Depois de passar inúmeras horas com essa maravilhosa aula e tentando desativar / ativar o dispositivo tanto no nível global quanto no nível de configuração específico (e todas as combinações), ele também não funciona de maneira consistente - às vezes funcionando bem, mas outras vezes desativando o dispositivo no Gerenciador de dispositivos, mas ainda deixando-o em funcionamento nas conexões de rede.

Tentei usar a interface INetConnection, especificamente INetConnection-> Connect / Disconnect:

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

Mas nunca consegui fazer com que isso tivesse efeito nas conexões nas caixas de teste do Vista ou X

Finalmente, encontrei este script em C # chamado ToggleNic:

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

O que parece estar passando pelo Shell de alguma forma para efetivamente causar o comportamento do botão direito. A limitação (pelo menos desta implementação) é que ela não funciona (sem modificação) em sistemas que não sejam o inglês, com os quais eu preciso que o meu trabalhe. Para ser justo, esta solução parece a mais viável, mas minha familiaridade com C # é baixa e não consegui descobrir se a API que está usando está disponível em C ++.

Qualquer ajuda ou insight seria muito apreciada - ou idéias sobre como realizar o que o script togglenic faz em C ++. Obrigado

questionAnswers(7)

yourAnswerToTheQuestion