Autor
|
Tema: Desactivar un adaptador de red desde C++ (Leído 6,801 veces)
|
el_doctor
Desconectado
Mensajes: 57
|
Hola, existe alguna manera de desactivar las tarjetas de red desde una aplicación hecha en C++ he estado leyendo la documentación msdn y está la clase Win32_NetworkAdapter la he usado desde C# pero no me funciona no se si puedo usar esta clase en C++ y hacer que funcione o hay alguna otra forma de hacerlo desde C++.
Gracias por su ayuda
|
|
|
En línea
|
|
|
|
Eternal Idol
Kernel coder
Moderador
Desconectado
Mensajes: 5.966
Israel nunca torturó niños, ni lo volverá a hacer.
|
Si, por supuesto que se puede, busca informacion y ejemplos sobre WMI. Casi con toda seguridad todas esas clases terminan llamando a la API de Windows para implementar su funcionalidad ...
|
|
|
En línea
|
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste. Juan Domingo Perón
|
|
|
|
el_doctor
Desconectado
Mensajes: 57
|
Gracias ecfisa lo voy a revisar.
Eternal no me dará problemas usar la clase Win32_NetworkAdapter en Windows8 ya que quiero que la aplicación funcione tanto en windows xq como windows 8
|
|
|
En línea
|
|
|
|
Eternal Idol
Kernel coder
Moderador
Desconectado
Mensajes: 5.966
Israel nunca torturó niños, ni lo volverá a hacer.
|
No tengo ni la mas minima idea sinceramente, fijate que dice su documentacion y de no servir en Windows 8 seguramente te dara la alternativa para ese S.O..
|
|
|
En línea
|
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste. Juan Domingo Perón
|
|
|
el_doctor
Desconectado
Mensajes: 57
|
Hola Eternal estoy intentando usar la api Win32_NetworkAdapter y según estaba leyendo para usar las api hay que inicializar los servicios COM pero tengo ratos de estar rompiendome la cabeza para validar si se ejecuta bien la función CoInitializeEx según la documentación si todo sale bien devuelve S_OK y hago algo así: if(CoInitializeEx(0, COINIT_MULTITHREADED) != S_OK) return NULL;
y al depurar siempre me da error de sintaxis en el if no se si es lo estresado que estoy pero no veo el error
|
|
|
En línea
|
|
|
|
Eternal Idol
Kernel coder
Moderador
Desconectado
Mensajes: 5.966
Israel nunca torturó niños, ni lo volverá a hacer.
|
Ese codigo compila, no se que estaras haciendo, asegurate que guardaste los cambios y de ultima recompila ... ni se que IDE usas asi que es dificil adivinar.
|
|
|
En línea
|
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste. Juan Domingo Perón
|
|
|
el_doctor
Desconectado
Mensajes: 57
|
Ya encontré el error era cosa del compilador gracias
Hola Eternal he revisado la documentación del enlace que puso el amigo ecfisa y según lo que ahí describen no es posible desconectar la tarjeta de red de forma real usando la api de windows y sugieren un método usando la interfaz de red shell copie el código e hice la implementación pero no me desconecta la tarjeta de red estoy usando windows 8 voy a poner el código, si me puedes ayudar te lo agradezco o no se si es verídica la información de ese enlace que explican que no es posible desconectar la tarjeta de red usando la api de windows. bool DisableConecction(LPCWSTR nameConecction) { bool result = false; CoInitialize(0); typedef void (_stdcall * LPNcFreeNetconProperties) (NETCON_PROPERTIES* pProps); HMODULE hmod = LoadLibrary(L"netshell.dll"); if(!hmod) return false; LPNcFreeNetconProperties NcFreeNetconProperties = (LPNcFreeNetconProperties)GetProcAddress(hmod, "NcFreeNetconProperties"); if(!NcFreeNetconProperties) return false; INetConnectionManager * pMan = 0; HRESULT hres = CoCreateInstance(CLSID_ConnectionManager, 0, CLSCTX_ALL, __uuidof(INetConnectionManager), (void**)&pMan); if(SUCCEEDED(hres)) { IEnumNetConnection * pEnum = 0; hres = pMan->EnumConnections(NCME_DEFAULT, &pEnum); if(SUCCEEDED(hres)) { INetConnection * pCon = 0; ULONG count; bool done = false; while(pEnum->Next(1, &pCon, &count) == S_OK && !done) { NETCON_PROPERTIES * pProps = 0; hres = pCon->GetProperties(&pProps); if(SUCCEEDED(hres)) { if(wcscmp (pProps->pszwName, L"Ethernet") == 0) //Aqui lo puse estático ya que este es el nombre que tiene para mi computadora. { result = (pCon->Disconnect() == S_OK); done = true; } NcFreeNetconProperties (pProps); } pCon->Release(); } pEnum->Release(); } pMan->Release(); } FreeLibrary(hmod); CoUninitialize(); return result; }
|
|
« Última modificación: 18 Septiembre 2013, 09:05 am por Eternal Idol »
|
En línea
|
|
|
|
Eternal Idol
Kernel coder
Moderador
Desconectado
Mensajes: 5.966
Israel nunca torturó niños, ni lo volverá a hacer.
|
Sinceramente no se de donde sacas eso, se hace como dice ahi con la Device Installation API. Por logica ningun objeto COM va a poder hacer magia si el S.O. no le provee la funcionalidad ...
|
|
|
En línea
|
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste. Juan Domingo Perón
|
|
|
el_doctor
Desconectado
Mensajes: 57
|
Hola Eternal pues he vuelto con lo de usar la Win API y pues según revisando la documentación de MSDN pues he implementado un código pero he quedado bloqueado para poder ejecutar el método Disable de la WIN32_NetworkAdapter que se supone es para desconectar la tarjeta de red, no se si una vez inicializado el COM y obtener los permisos debo recorrer la clase o como te agradecería si me ayudas te dejo el código que he escrito hasta ahora: HRESULT hres; //Initialize COM if (CoInitializeEx(0, COINIT_MULTITHREADED) != S_OK) { CoUninitialize(); return false; } // Set general COM security levels -------------------------- if (CoInitializeSecurity (NULL, -1, NULL, NULL, RPC_C_AUTHN_LEVEL_DEFAULT, RPC_C_IMP_LEVEL_IMPERSONATE, NULL, EOAC_NONE, NULL) != S_OK) { CoUninitialize(); return false; } //Obtain the initial locator to WMI IWbemLocator *pLoc = NULL; if (CoCreateInstance (CLSID_WbemLocator, 0, CLSCTX_INPROC_SERVER, IID_IWbemLocator, (LPVOID *) &pLoc) != S_OK) { CoUninitialize(); return false; } // Connect to WMI through the IWbemLocator::ConnectServer method IWbemServices *pSvc = NULL; hres = pLoc->ConnectServer (_bstr_t(L"ROOT\\CIMV2"), NULL, NULL, 0, NULL, 0, 0, &pSvc); if (FAILED (hres)) { pLoc->Release(); CoUninitialize(); return false; } // Set security levels on the proxy if (CoSetProxyBlanket (pSvc, RPC_C_AUTHN_WINNT, RPC_C_AUTHZ_NONE, NULL, RPC_C_AUTHN_LEVEL_CALL, RPC_C_IMP_LEVEL_IMPERSONATE, NULL, EOAC_NONE) != S_OK) { pSvc->Release(); pLoc->Release(); CoUninitialize(); return false; } // set up to call the Win32_NetworkAdapter::Disable method BSTR MethodName = SysAllocString (L"Disable"); BSTR ClassName = SysAllocString (L"Win32_NetworkAdapter"); IWbemClassObject* pClass = NULL; hres = pSvc->GetObject (ClassName, 0, NULL, &pClass, NULL); IWbemClassObject* pInParamsDefinition = NULL; hres = pClass->GetMethod (MethodName, 0, &pInParamsDefinition, NULL);
|
|
« Última modificación: 18 Septiembre 2013, 16:53 pm por el_doctor »
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
forma de desactivar F8 desde VB
« 1 2 3 »
Programación Visual Basic
|
abel_c_b
|
29
|
9,605
|
31 Mayo 2008, 17:03 pm
por xavierote
|
|
|
Desactivar voltaje USB (planteamiento desde otro punto de vista)
Programación General
|
Haskell++
|
2
|
3,617
|
6 Septiembre 2012, 02:29 am
por sistemx
|
|
|
Se puede desactivar y activar esto desde mi programa ???
« 1 2 »
.NET (C#, VB.NET, ASP)
|
TrashAmbishion
|
17
|
9,050
|
12 Diciembre 2012, 20:59 pm
por TrashAmbishion
|
|
|
Desactivar un adaptador de red desde C#
.NET (C#, VB.NET, ASP)
|
el_doctor
|
3
|
4,440
|
17 Septiembre 2013, 19:31 pm
por el_doctor
|
|