Compartir a través de


Uso de la agrupación de dispositivos en controladores UMDF

User-Mode Driver Framework (UMDF) versiones 1.11 y 2.0

Si el controlador de User-Mode Driver Framework (UMDF) se creó con la versión 1.11 o 2.0 y se ejecuta en Windows 8 o posterior, el marco crea una única instancia de Wudfhost que puede hospedar varias pilas de dispositivos. Esta técnica se denomina agrupación de dispositivos. La principal ventaja de la agrupación de dispositivos es reducir el consumo de memoria en un entorno con varios dispositivos UMDF.

Si se produce un error en un dispositivo agrupado, el marco finaliza la instancia de Wudfhost e intenta reiniciar todos los dispositivos que se encontraban anteriormente en el grupo. Si se produce un error en el dispositivo de nuevo mientras se agrupa, el marco crea un proceso wudfhost independiente para el dispositivo e intenta iniciar el dispositivo de nuevo.

Si se produce un error en el dispositivo en el proceso de host independiente, el marco intenta reiniciarlo hasta cinco veces. El marco restablece el recuento de errores del dispositivo a uno cuando han transcurrido treinta minutos desde el último error.

Si se reinicia el sistema, el marco vuelve a colar los dispositivos, excepto los que han fallado mientras se ejecutan en un proceso independiente.

Para deshabilitar la agrupación de dispositivos para un dispositivo específico, use la directiva UmdfHostProcessSharing en la sección DDInstall específica de WDF de INF. Para obtener información sobre UmdfHostProcessSharing, vea Especificar directivas WDF en archivos INF.

Si el controlador usa E /S directa, debe establecer UmdfHostProcessSharing en ProcessSharingDisabled. De lo contrario, es posible que el controlador no se inicie. Si se selecciona WdfDeviceIoBufferedOrDirect y se agrupa el dispositivo, el marco cambia el método de acceso del búfer a la E/S almacenada en búfer. Si se selecciona WdfDeviceIoBufferedOrDirect y el dispositivo no está agrupado, el marco cambia el método de acceso del búfer a E/S directa.

Para seleccionar un método de acceso al búfer, el controlador debe llamar al método IWDFDeviceInitialize2::SetIoTypePreference desde su función de devolución de llamada IDriverEntry::OnDeviceAdd . Para obtener información sobre los métodos de acceso, consulte Acceso a búferes de datos en UMDF-Based controladores.

Versiones 1.9 y anteriores de UMDF

Si el controlador se creó con la versión 1.9 o anterior de UMDF, el marco crea una instancia independiente del proceso de host (Wudfhost) para cada pila de dispositivos.

Si el dispositivo no se inicia, el marco intenta reiniciarlo hasta cinco veces. El marco restablece el recuento de errores del dispositivo a uno cuando han transcurrido treinta minutos desde el último error.

En un entorno no agrupado, si varias pilas de dispositivos comparten el mismo controlador UMDF:

  • Cada pila de dispositivos se carga en un proceso wudfHost independiente.
  • El marco llama a los métodos IDriverEntry::OnInitialize e IDriverEntry::OnDeinitialize de la controladora una vez para cada pila de dispositivos.
  • El marco llama al método IDriverEntry::OnDeviceAdd del controlador una vez para cada pila de dispositivos. Cada objeto de dispositivo está asociado a un objeto de controlador independiente.

En un entorno agrupado, si varias pilas de dispositivos comparten el mismo controlador de modo de usuario:

Dado que solo hay un objeto de controlador en una configuración agrupada, el controlador no debe almacenar ningún contexto por dispositivo en variables globales o en objetos que se comparten entre los dispositivos, como el objeto de devolución de llamada del controlador. En su lugar, el controlador debe almacenar el contexto por dispositivo en un objeto que no se comparte entre las pilas de dispositivos, como el objeto de devolución de llamada del dispositivo del controlador.