Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Para permitir que SDV compruebe el controlador KMDF, debe declarar cada función de retorno de llamada mediante un tipo de rol de función de retorno de llamada. Los tipos de rol de las funciones de devolución de llamada se definen en los distintos archivos de encabezado de WDF y se incluyen al compilar su controlador con el archivo de encabezado Wdf.h. En la tabla siguiente se muestran los tipos de funciones de rol y las funciones de devolución de llamada de eventos con las que están asociadas.
Debe declarar las funciones de devolución de llamada del controlador antes de las definiciones de función de devolución de llamada. En el siguiente ejemplo se muestra la declaración del tipo de rol de la función para la función de devolución de llamada EvtDriverDeviceAdd. En este ejemplo, la función de devolución de llamada se denomina EvtDriverDeviceAdd.
#include <NTDDK.h>
#include <wdf.h>
EVT_WDF_DRIVER_DEVICE_ADD EvtDriverDeviceAdd
Si una función callback tiene una declaración de prototipo de función, debe reemplazar el prototipo de función por la declaración de tipo de rol de función. Para obtener más información sobre las declaraciones de tipo de rol de función, vea Using Function Role Type Declarations.
En la tabla siguiente se muestran los tipos de funciones de devolución de llamada y las funciones de devolución de llamada de eventos con las que están asociadas.
| Tipo de rol funcional | Función de devolución de llamada de eventos |
|---|---|
EVT_WDF_CHILD_LIST_ADDRESS_DESCRIPTION_CLEANUP |
|
EVT_WDF_CHILD_LIST_ADDRESS_DESCRIPTION_COPY |
|
EVT_WDF_CHILD_LIST_ADDRESS_DESCRIPTION_DUPLICATE |
|
EVT_WDF_CHILD_LIST_CREATE_DEVICE |
|
EVT_WDF_CHILD_LIST_DEVICE_REENUMERATED |
|
EVT_WDF_CHILD_LIST_IDENTIFICATION_DESCRIPTION_CLEANUP |
|
EVT_WDF_LISTA_DE_HIJOS_COMPARACIÓN_DE_DESCRIPCIÓN_DE_IDENTIFICACIÓN |
|
EVT_WDF_CHILD_LIST_IDENTIFICATION_DESCRIPTION_COPY |
|
EVT_WDF_CHILD_LIST_IDENTIFICATION_DESCRIPTION_DUPLICATE |
|
EVT_WDF_CHILD_LIST_SCAN_FOR_CHILDREN |
|
EVT_WDF_DEVICE_ARM_WAKE_FROM_S0 |
|
EVT_WDF_DEVICE_ARM_WAKE_FROM_SX |
|
EVT_WDF_DEVICE_CONTEXT_CLEANUP |
|
EVT_WDF_DEVICE_CONTEXT_DESTROY |
|
EVT_WDF_DEVICE_D0_ENTRY |
|
EVT_WDF_DEVICE_D0_ENTRY_POST_INTERRUPTS_ENABLED |
|
EVT_WDF_DEVICE_D0_EXIT |
|
EVT_WDF_DEVICE_D0_EXIT_PRE_INTERRUPTS_DISABLED |
|
EVT_WDF_DEVICE_DISABLE_WAKE_AT_BUS |
|
EVT_WDF_DEVICE_DISARM_WAKE_FROM_S0 |
|
EVT_WDF_DEVICE_DISARM_WAKE_FROM_SX |
|
EVT_WDF_DEVICE_EJECT (Evento de Expulsión del Dispositivo WDF) |
|
EVT_WDF_DEVICE_ENABLE_WAKE_AT_BUS |
|
EVT_WDF_DEVICE_FILE_CREATE |
|
EVT_WDF_DEVICE_FILTER_RESOURCE_REQUIREMENTS |
|
EVT_WDF_DEVICE_PNP_STATE_CHANGE_NOTIFICATION |
|
EVT_WDF_DEVICE_POWER_POLICY_STATE_CHANGE_NOTIFICATION |
|
EVT_WDF_DEVICE_POWER_STATE_CHANGE_NOTIFICATION |
|
EVT_WDF_DEVICE_PREPARE_HARDWARE |
|
EVT_WDF_DEVICE_PROCESS_QUERY_INTERFACE_REQUEST |
|
EVT_WDF_DEVICE_QUERY_REMOVE |
|
EVT_WDF_DEVICE_QUERY_STOP |
|
EVT_WDF_DEVICE_RELATIONS_QUERY |
|
EVT_WDF_DEVICE_RELEASE_HARDWARE |
|
EVT_WDF_DEVICE_REMOVE_ADDED_RESOURCES |
|
EVT_WDF_DEVICE_RESOURCE_REQUIREMENTS_QUERY |
|
EVT_WDF_DEVICE_RESOURCES_QUERY |
|
EVT_WDF_DEVICE_SELF_MANAGED_IO_CLEANUP |
|
EVT_WDF_DEVICE_SELF_MANAGED_IO_FLUSH |
|
EVT_WDF_DEVICE_SELF_MANAGED_IO_INIT |
|
EVT_WDF_DEVICE_SELF_MANAGED_IO_RESTART |
|
EVT_WDF_DEVICE_SELF_MANAGED_IO_SUSPEND |
|
EVT_WDF_DEVICE_SET_LOCK |
|
EVT_WDF_DEVICE_SHUTDOWN_NOTIFICATION |
|
EVT_WDF_DEVICE_SURPRISE_REMOVAL |
|
EVT_WDF_DEVICE_USAGE_NOTIFICATION |
|
EVT_WDF_DEVICE_WAKE_FROM_S0_TRIGGERED |
|
EVT_WDF_DEVICE_WAKE_FROM_SX_TRIGGERED |
|
EVT_WDF_DMA_ENABLER_DISABLE |
|
EVT_WDF_DMA_ENABLER_ENABLE |
|
EVT_WDF_DMA_ENABLER_FILL |
|
EVT_WDF_DMA_ENABLER_FLUSH |
|
EVT_WDF_DMA_ENABLER_SELFMANAGED_IO_START |
|
EVT_WDF_DMA_ENABLER_SELFMANAGED_IO_STOP |
|
EVT_WDF_DPC |
|
EVT_WDF_DRIVER_DEVICE_ADD |
|
EVT_WDF_DRIVER_UNLOAD |
|
EVT_WDF_FILE_CLEANUP |
|
EVT_WDF_FILE_CLOSE |
|
EVT_WDF_FILE_CONTEXT_CLEANUP_CALLBACK |
|
EVT_WDF_FILE_CONTEXT_DESTROY_CALLBACK |
|
EVT_WDF_INTERRUPT_DISABLE |
|
EVT_WDF_INTERRUPT_DPC |
|
EVT_WDF_INTERRUPT_ENABLE |
|
EVT_WDF_INTERRUPT_ISR |
|
EVT_WDF_INTERRUPT_SYNCHRONIZE |
|
EVT_WDF_IO_IN_CALLER_CONTEXT |
|
EVT_WDF_IO_QUEUE_CONTEXT_CLEANUP_CALLBACK |
|
EVT_WDF_IO_QUEUE_CONTEXT_DESTROY_CALLBACK |
|
EVT_WDF_IO_QUEUE_IO_CANCELED_ON_QUEUE |
|
EVT_WDF_IO_QUEUE_IO_DEFAULT |
|
EVT_WDF_IO_QUEUE_IO_DEVICE_CONTROL |
|
EVT_WDF_IO_QUEUE_IO_CONTROL_INTERNO_DISPOSITIVO |
|
EVT_WDF_IO_QUEUE_IO_READ |
|
EVT_WDF_IO_QUEUE_IO_RESUME |
|
EVT_WDF_IO_QUEUE_IO_STOP |
|
EVT_WDF_IO_QUEUE_IO_WRITE |
|
EVT_WDF_IO_QUEUE_STATE |
|
EVT_WDF_IO_TARGET_QUERY_REMOVE |
|
EVT_WDF_IO_TARGET_REMOVE_CANCELED |
|
EVT_WDF_IO_TARGET_REMOVE_COMPLETE |
|
EVT_WDF_OBJECT_CONTEXT_CLEANUP |
|
EVT_WDF_OBJECT_CONTEXT_DESTROY |
|
EVT_WDF_PROGRAM_DMA |
|
EVT_WDF_REQUEST_CANCEL |
|
EVT_WDF_REQUEST_COMPLETION_ROUTINE |
|
EVT_WDF_TIMER |
|
EVT_WDF_TRACE_CALLBACK |
|
EVT_WDF_WMI_INSTANCE_EXECUTE_METHOD |
|
EVT_WDF_WMI_INSTANCE_QUERY_INSTANCE |
|
EVT_WDF_WMI_INSTANCE_SET_INSTANCE |
|
EVT_WDF_WMI_INSTANCE_SET_ITEM |
|
EVT_WDF_WMI_PROVIDER_FUNCTION_CONTROL |
|
EVT_WDF_WORKITEM |
|
EVT_WDFDEVICE_WDM_IRP_PREPROCESS |
Tipos de roles de funciones que permiten varios callbacks
Hay algunos tipos de función de rol que pueden tener varias funciones de callback de eventos asociadas a ellos. Por ejemplo, un controlador podría tener varias funciones de callback EvtTimerFunc o EvtDpcFunc. En la tabla siguiente se muestra el número máximo de devoluciones de llamada compatibles con SDV para cada tipo de rol de función. Aunque no es incorrecto que un controlador tenga más funciones de devolución de llamada de las que se enumeran como máximo en la tabla, dificulta el proceso de comprobación al usar SDV. Para obtener información sobre los cambios que puede que necesite realizar en el archivo Sdv-map.h para dar cabida a las funciones de devolución de llamada adicionales, consulte Puntos de entrada duplicados para un tipo de rol de función.
| Tipo de rol funcional | Número máximo de funciones de devolución de llamada |
|---|---|
EVT_WDF_DPC |
7 |
EVT_WDF_INTERRUPT_SYNCHRONIZE |
11 |
EVT_WDF_TIMER |
6 |
EVT_WDF_WMI_INSTANCE_EXECUTE_METHOD |
5 |
EVT_WDF_WMI_INSTANCE_QUERY_INSTANCE |
5 |
EVT_WDF_WMI_INSTANCE_SET_INSTANCE |
5 |
EVT_WDF_WMI_INSTANCE_SET_ITEM |
5 |
Tipos de rol de función y colas de E/S
Utilice los siguientes tipos de rol de función al declarar los controladores de solicitudes y las funciones de devolución de llamada que dependen del entorno de KMDF para entregar las solicitudes de E/S al controlador (para el envío secuencial o paralelo). No uses estos tipos de rol de función para las funciones que reenvían manualmente las solicitudes de la cola predeterminada a otras colas (distribución manual). SDV no admite un modelo de memoria que le permita realizar un seguimiento de las solicitudes de una cola a otra.
Para obtener más información sobre las colas de E/S, consulte Creación de colas de E/S.
| Tipos de rol usados para la cola de E/S configurada para el despacho manual |
|---|
EVT_WDF_IO_QUEUE_CONTEXT_CLEANUP_CALLBACK |
EVT_WDF_IO_QUEUE_CONTEXT_DESTROY_CALLBACK |
EVT_WDF_IO_QUEUE_IO_CANCELED_ON_QUEUE |
EVT_WDF_IO_QUEUE_IO_DEFAULT |
EVT_WDF_IO_QUEUE_IO_DEVICE_CONTROL |
EVT_WDF_IO_QUEUE_IO_CONTROL_INTERNO_DISPOSITIVO |
EVT_WDF_IO_QUEUE_IO_READ |
EVT_WDF_IO_QUEUE_IO_RESUME |
EVT_WDF_IO_QUEUE_IO_STOP |
EVT_WDF_IO_QUEUE_IO_WRITE |
EVT_WDF_IO_QUEUE_STATE |
Tipos de rol de función para las funciones EvtCleanupCallback y EvtDestroyCallback
Debe declarar la función EvtCleanupCallback y EvtDestroyCallback con tipos de rol de función específicos del objeto. SDV requiere estos tipos de roles específicos del objeto para determinar si el controlador está utilizando correctamente la función de devolución de llamada. Use las tablas siguientes para determinar qué tipo de función se va a usar.
| Tipo de objeto | Tipo de rol de función para EvtCleanupCallback |
|---|---|
Objeto de dispositivo |
EVT_WDF_DEVICE_CONTEXT_CLEANUP |
Objeto de cola de E/S |
EVT_WDF_IO_QUEUE_CONTEXT_CLEANUP_CALLBACK |
File (objeto) |
EVT_WDF_FILE_CONTEXT_CLEANUP_CALLBACK |
Todos los demás objetos |
EVT_WDF_OBJECT_CONTEXT_CLEANUP |
| Tipo de objeto | Tipo de rol de función para EvDestroyCallback |
|---|---|
Objeto de dispositivo |
EVT_WDF_DEVICE_CONTEXT_DESTROY |
Objeto de cola de E/S |
EVT_WDF_IO_QUEUE_CONTEXT_DESTROY_CALLBACK |
File (objeto) |
EVT_WDF_FILE_CONTEXT_DESTROY_CALLBACK |
Todos los demás objetos |
EVT_WDF_OBJECT_CONTEXT_DESTROY |