Compartir a través de


Impedir un desequilibrio de crear y cerrar notificaciones a un controlador

Advertencia

UMDF 2 es la versión más reciente de UMDF y sustituye a UMDF 1. Todos los controladores UMDF nuevos deben escribirse con UMDF 2. No se agregan nuevas características a UMDF 1 y hay compatibilidad limitada con UMDF 1 en versiones más recientes de Windows 10. Los controladores universales de Windows deben usar UMDF 2.

Los ejemplos de UMDF 1 archivados se pueden encontrar en la actualización de ejemplos de controladores de Windows 11, versión 22H2 - mayo de 2022.

Para obtener más información, consulta Introducción con UMDF.

Un controlador UMDF superior puede usar el método IWDFDeviceInitialize::AutoForwardCreateCleanupClose para controlar cuándo el marco reenvía automáticamente las notificaciones create-file, cleanup-file y close-file al siguiente controlador inferior de la pila de dispositivos. Sin embargo, dado que el controlador superior establece AutoForwardCreateCleanupClose para reenviar automáticamente solo en un nivel de dispositivo y no en un nivel de archivo, el reenvío debe ser el mismo para todos los archivos de un dispositivo. El marco garantiza este comportamiento de reenvío para las notificaciones cleanup-file y close-file. Si el controlador superior implementa la función de devolución de llamada IQueueCallbackCreate::OnCreateFile , debe asegurarse de que su comportamiento de reenvío es el mismo para todas las solicitudes de creación de archivos y es coherente con el comportamiento de reenvío para las notificaciones de limpieza de archivos y de cierre de archivo. Si no lo hace, es posible que los controladores inferiores reciban una cantidad desigual de llamadas a sus métodos IQueueCallbackCreate::OnCreateFile e IFileCallbackCleanup::OnCleanupFile e IFileCallbackClose::OnCloseFile .

Para evitar que los controladores inferiores reciban una cantidad desigual de notificaciones create-file y close-file, el controlador superior debe asegurarse, en su función de devolución de llamada IQueueCallbackCreate::OnCreateFile , que:

  • Su comportamiento de reenvío es el mismo para todos los archivos de un dispositivo.

  • Su comportamiento de reenvío es coherente con la forma en que establece el parámetro flag de IWDFDeviceInitialize::AutoForwardCreateCleanupClose. Es decir:

    • Si el controlador establece la marca en WdfTrue, el controlador debe reenviar todas las solicitudes de creación de archivos a la pila del dispositivo.
    • Si el controlador establece la marca en WdfFalse, el controlador no debe reenviar ninguna de las solicitudes de creación de archivos a la pila.
    • Si el controlador establece la marca en WdfUseDefault y:
      • Si el controlador es un controlador de función, no debe reenviar ninguna solicitud de archivo de creación a la pila.
      • Si el controlador es un controlador de filtro, debe reenviar todas las solicitudes de creación de archivos a la pila.

En situaciones en las que el controlador no puede reenviar una solicitud create-file, el controlador todavía puede generar una nueva solicitud de creación de archivos para controladores inferiores llamando al método IWDFDevice::CreateWdfFile para crear un nuevo archivo WDF. Después, el controlador puede completar la solicitud de creación de archivo original en función de los resultados de la solicitud create-file recién generada (es decir, a partir de los resultados de CreateWdfFile).