Especificar un modo de sincronización de devolución de llamada
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.
El controlador puede especificar cómo el marco llama a sus funciones de devolución de llamada. El controlador especifica un modo de sincronización (o bloqueo) para un dispositivo antes de llamar al método IWDFDriver::CreateDevice para crear un objeto de dispositivo para el dispositivo. Para especificar el modo de sincronización, el controlador debe llamar al método IWDFDeviceInitialize::SetLockingConstraint . El controlador recibe un puntero a la interfaz IWDFDeviceInitialize cuando se llama a su método IDriverEntry::OnDeviceAdd para agregar el dispositivo al sistema.
El controlador puede especificar uno de los siguientes valores del tipo de enumeración WDF_CALLBACK_CONSTRAINT en el parámetro LockType de IWDFDeviceInitialize::SetLockingConstraint para identificar el modo de bloqueo. El tipo de restricción (o bloqueo) especificado depende de cuánto paralelismo puede aprovechar el dispositivo de hardware y cuánto puede controlar el controlador.
Valor | Significado |
---|---|
Ninguno (0) |
Indica que no se sincronizan funciones de devolución de llamada en el controlador. |
WdfDeviceLevel (1) |
Indica que se sincronizan todas las funciones de devolución de llamada de cola en el controlador. |
Nota Si el controlador no llama a IWDFDeviceInitialize::SetLockingConstraint para especificar un valor, el marco establece el valor predeterminado de esta propiedad en WdfDeviceLevel.
Las restricciones solo se aplican a las funciones de devolución de llamada de cola y no a Plug and Play (PnP) y a las funciones de devolución de llamada de administración de energía. Las funciones de devolución de llamada de cola incluyen lo siguiente:
Funciones de devolución de llamada de envío automáticas, como IQueueCallbackRead::OnRead e IQueueCallbackWrite::OnWrite. Para obtener más información, consulte Funciones de devolución de llamada de eventos de cola de E /S.
Funciones de devolución de llamada de cambio de estado de cola, como IQueueCallbackStateChange::OnStateChange.
Funciones de devolución de llamada de cancelación de solicitudes, como IRequestCallbackCancel::OnCancel.
Limpieza de archivos y cierre las funciones de devolución de llamada, como IFileCallbackCleanup::OnCleanupFile e IFileCallbackClose::OnCloseFile.
Las funciones de devolución de llamada de finalización de solicitudes (IRequestCallbackRequestCompletion::OnCompletion) no son funciones de devolución de llamada en cola. Por lo tanto, no se sincronizan.