GPIO_CLIENT_PREPARE_CONTROLLER función de devolución de llamada (gpioclx.h)
La función de devolución de llamada de evento CLIENT_PrepareController realiza todas las operaciones necesarias para que el controlador de controlador gpIO pueda acceder al controlador de E/S de uso general (GPIO).
Sintaxis
GPIO_CLIENT_PREPARE_CONTROLLER GpioClientPrepareController;
NTSTATUS GpioClientPrepareController(
[in] WDFDEVICE Device,
[in] PVOID Context,
[in] WDFCMRESLIST ResourcesRaw,
[in] WDFCMRESLIST ResourcesTranslated
)
{...}
Parámetros
[in] Device
Un controlador WDFDEVICE para el objeto de dispositivo de marco que representa el controlador GPIO.
[in] Context
Puntero al contexto del dispositivo del controlador GPIO.
[in] ResourcesRaw
Un identificador WDFCMRESLIST para una colección de objetos de recursos de marco. Esta colección identifica los recursos de hardware sin procesar (relativos al bus) que el administrador de Plug and Play (PnP) ha asignado al dispositivo de controlador GPIO.
[in] ResourcesTranslated
Un identificador WDFCMRESLIST para una colección de objetos de recursos de marco. Esta colección identifica los recursos de hardware traducidos (físicos del sistema) que el administrador de PnP ha asignado al dispositivo de controlador GPIO.
Valor devuelto
La función CLIENT_PrepareController devuelve STATUS_SUCCESS si la llamada se realiza correctamente. De lo contrario, devuelve un código de error adecuado.
Comentarios
El controlador del controlador GPIO implementa esta función de devolución de llamada. La extensión de marco gpIO (GpioClx) llama a esta función para inicializar los recursos de hardware que necesita el controlador de controlador GPIO para que pueda acceder al dispositivo del controlador GPIO.
Los parámetros ResourcesRaw y ResourcesTranslated se controlan en listas de recursos sin procesar y traducidos. En estas listas se describen los recursos de hardware que el administrador de PnP ha asignado al dispositivo de controlador GPIO especificado por el parámetro Device . Para obtener más información, vea Recursos sin procesar y traducidos.
Durante la devolución de llamada CLIENT_PrepareController , el controlador del controlador GPIO puede adquirir los recursos de hardware que requiere de la lista ResourcesRaw o ResourcesTranslated . Si el dispositivo del controlador GPIO está asignado a memoria, el controlador debe asignar el intervalo de direcciones de memoria relativa al bus o los intervalos asignados al registro de hardware del dispositivo en las direcciones virtuales del sistema. Para obtener más información, consulte Asignación de direcciones Bus-Relative a direcciones virtuales.
Si el controlador GPIO no está asignado a memoria, los recursos de hardware del controlador contienen un identificador de conexión en lugar de un intervalo de memoria. El controlador usa este identificador para abrir una conexión lógica al controlador GPIO y envía solicitudes de E/S a través de esta conexión para acceder a los registros del controlador.
GpioClx se conecta a (y posteriormente se desconecta de) cualquier recurso de interrupción que el administrador de PnP asigne al controlador GPIO. Si GpioClx recibe este recurso de interrupción, no quita este recurso de interrupción de las listas de recursos que pasa a la función de devolución de llamada CLIENT_PrepareController . Sin embargo, el controlador del controlador GPIO no debe intentar conectarse (o después desconectarse) a ningún recurso de interrupción que encuentre en estas listas.
La función de devolución de llamada de evento CLIENT_ReleaseController realiza operaciones necesarias cuando el dispositivo del controlador GPIO ya no es accesible. Durante esta devolución de llamada, el controlador del controlador GPIO debe liberar los recursos de hardware que adquirió durante la devolución de llamada anterior CLIENT_PrepareController .
Para registrar la función de devolución de llamada de CLIENT_PrepareController del controlador, llame al método GPIO_CLX_RegisterClient . Este método acepta, como parámetro de entrada, un puntero a una estructura de GPIO_CLIENT_REGISTRATION_PACKET que contiene un puntero de función CLIENT_PrepareController .
Aunque se llama a la función de devolución de llamada CLIENT_PrepareController en IRQL = PASSIVE_LEVEL, no debe hacer que esta función sea paginable. La CLIENT_PrepareController devolución de llamada está en la ruta de acceso de tiempo crítica para restaurar la energía en los dispositivos de la plataforma de hardware y, por motivos de rendimiento, no debe retrasarse por errores de página.
Ejemplos
Para definir un CLIENT_PrepareController función de devolución de llamada, primero debe proporcionar una declaración de función que identifique el tipo de función de devolución de llamada que está definiendo. Windows proporciona un conjunto de tipos de función de devolución de llamada para controladores. Declarar una función mediante los tipos de función de devolución de llamada ayuda a Análisis de código para controladores, Comprobador de controladores estáticos (SDV) y otras herramientas de comprobación encuentran errores y es un requisito para escribir controladores para el sistema operativo Windows.
Por ejemplo, para definir una función de devolución de llamada CLIENT_PrepareController denominada MyEvtGpioPrepareController
, use el tipo de función GPIO_CLIENT_PREPARE_CONTROLLER, como se muestra en este ejemplo de código:
GPIO_CLIENT_PREPARE_CONTROLLER MyEvtGpioPrepareController;
A continuación, implemente la función de devolución de llamada de la siguiente manera:
_Use_decl_annotations_
NTSTATUS
MyEvtGpioPrepareController(
WDFDEVICE Device,
PVOID Context,
WDFCMRESLIST ResourcesRaw,
WDFCMRESLIST ResourcesTranslated
)
{ ... }
El tipo de función GPIO_CLIENT_PREPARE_CONTROLLER se define en el archivo de encabezado Gpioclx.h. Para identificar con más precisión los errores al ejecutar las herramientas de análisis de código, asegúrese de agregar la anotación Use_decl_annotations a la definición de función. La anotación Use_decl_annotations garantiza que se usen las anotaciones que se aplican al tipo de función GPIO_CLIENT_PREPARE_CONTROLLER en el archivo de encabezado. Para obtener más información sobre los requisitos de las declaraciones de función, consulte Declaración de funciones mediante tipos de rol de función para controladores KMDF. Para obtener más información sobre Use_decl_annotations, consulte Anotación del comportamiento de la función.
Requisitos
Requisito | Value |
---|---|
Cliente mínimo compatible | Se admite a partir de Windows 8. |
Plataforma de destino | Escritorio |
Encabezado | gpioclx.h |
IRQL | Se llama en PASSIVE_LEVEL. |