2012-04-11 8 views
6

Estoy tratando de habilitar mediante programación el uso compartido del tipo público público en un dispositivo que coincida con un GUID conocido en una máquina con Windows 7.INetSharingConfiguration-> EnableSharing (ICSSHARINGTYPE_PUBLIC) devuelve 0x80040201

API en: http://msdn.microsoft.com/en-us/library/windows/desktop/aa365944(v=vs.85).aspx

La lista de errores mostrar lo siguiente: E_ABORT, E_FAIL, E_INVALIDARG, E_NOINTERFACE, E_NOTIMPL, E_OUTOFMEMORY, E_POINTER y E_UNEXPECTED.

El código de error que obtengo es 0x80040201 y resuelve: "Un evento no pudo invocar a ninguno de los suscriptores". que no parece coincidir con ninguno de los códigos de error enumerados anteriormente.

Si voy manualmente a las propiedades de los adaptadores de red y voy a la pestaña de compartir y habilito el uso compartido y selecciono la red privada y hago clic en Aceptar, compartir se habilita correctamente.

Después de esto mi código anterior se ejecuta sin problema.

Incluso puedo configurar de forma manual el uso compartido en otro adaptador (público) y una red privada diferente y luego ejecutar mi código y ver que mi código actualice las redes públicas y privadas a lo que deseo. Esto parece funcionar después de la primera habilitación manual de compartir a través del panel de propiedades de la red.

El problema se ha duplicado en dos computadoras diferentes con Windows 7 de 64 bits. Parece suceder después de desinstalar el controlador del adaptador de red del sistema cuando se habilita el uso compartido y luego reinstalar el controlador del adaptador de red.

He intentado hacer que el desinstalador deshabilite el uso compartido durante la desinstalación, pero esto parece ser impredecible.

El panel de propiedades para compartir red de Windows está haciendo algo detrás de escena que esta llamada a API no hace ya que la configuración manual de compartir en el adaptador funciona siempre.

¿Alguien tiene alguna idea de lo que podría ser?

+0

El error es poco probable que el mensaje/significado que encontraste para el código sea correcto. Como dice [Códigos en FACILITY_ITF] (http://msdn.microsoft.com/en-us/library/windows/desktop/ms679751%28v=vs.85%29.aspx), este código es específico de la fuente. Quizás puedas usar la API 'GetErrorInfo' y obtener una descripción correcta que arroje luz sobre el origen del problema. –

+0

Me encontré con esto también. Me pregunto si tiene algo que ver con esto? 'Una conexión compartida públicamente tiene habilitado el Servidor de seguridad de conexión a Internet. ¿Tal vez habilitarlo desde el panel de propiedades configura el firewall de manera que EnableSharing pueda funcionar? –

+0

No estoy seguro de si este hotfix puede ser útil para .NET 2.0, pero vale la pena intentarlo: http://support.microsoft.com/kb/926997/en-us – utapyngo

Respuesta

1

que tenían el mismo problema en Windows 8.1 y acabó fijándolo después de leer: https://support.microsoft.com/kb/828807

Mi código es C#, pero estoy seguro de que puede hacer lo mismo en C++

// Disable ICS on any network iterfaces which may no longer be present in the system 
public void Disable_ICS_WMI() 
{ 
    ManagementScope scope = new ManagementScope("\\\\.\\ROOT\\Microsoft\\HomeNet"); 

    //create object query 
    ObjectQuery query = new ObjectQuery("SELECT * FROM HNet_ConnectionProperties "); 

    //create object searcher 
    ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, query); 
    //get a collection of WMI objects 
    ManagementObjectCollection queryCollection = searcher.Get(); 

    //enumerate the collection. 
    foreach (ManagementObject m in queryCollection) 
    { 
    // access properties of the WMI object 
    Console.WriteLine("Connection : {0}", m["Connection"]); 
    try 
    { 
     PropertyDataCollection properties = m.Properties; 
     foreach(PropertyData prop in properties) 
     { 
     if (prop.Name == "IsIcsPrivate" && ((Boolean) prop.Value) == true) 
     { 
      prop.Value = false; 
      m.Put(); 
     } 
     }   
    } catch (Exception e) 
    { 
     Console.WriteLine("ex " + e.Message); 
     continue; 
    } 
    } 
} 
+0

Gracias por el enlace. El problema parece haberse ido. Sin embargo, debe tenerse en cuenta que aún necesita llamar a 'DisableSharing' después de invocar este método. – Mygod