GPIO_CLIENT_CONTROLLER_SPECIFIC_FUNCTION función de devolución de llamada (gpioclx.h)
La función de devolución de llamada de evento CLIENT_ControllerSpecificFunction realiza una operación específica de un controlador de E/S de uso general (GPIO) determinado.
Sintaxis
GPIO_CLIENT_CONTROLLER_SPECIFIC_FUNCTION GpioClientControllerSpecificFunction;
NTSTATUS GpioClientControllerSpecificFunction(
[in] PVOID Context,
[in, out] PGPIO_CLIENT_CONTROLLER_SPECIFIC_FUNCTION_PARAMETERS Parameters
)
{...}
Parámetros
[in] Context
Puntero al contexto del dispositivo del controlador GPIO.
[in, out] Parameters
Puntero a una estructura GPIO_CLIENT_CONTROLLER_SPECIFIC_FUNCTION_PARAMETERS que contiene los búferes de entrada y salida para la operación específica del controlador.
Valor devuelto
La función CLIENT_ControllerSpecificFunction devuelve STATUS_SUCCESS si la llamada se realiza correctamente. Entre los posibles valores devueltos se incluyen los siguientes códigos de error.
Código devuelto | Descripción |
---|---|
|
El controlador GPIO no admite la operación especificada por los parámetros de entrada. |
|
El tamaño del búfer de entrada o del búfer de salida es demasiado pequeño. |
Comentarios
Como opción, un controlador de controlador GPIO puede admitir solicitudes IOCTL_GPIO_CONTROLLER_SPECIFIC_FUNCTION . Este tipo de solicitud de control de E/S (IOCTL) realiza operaciones específicas del controlador para la ventaja de los controladores de dispositivos periféricos que requieren estas operaciones. Para admitir este IOCTL, un controlador de controlador GPIO implementa una función de CLIENT_ControllerSpecificFunction .
La extensión de marco gpIO (GpioClx) admite la función CLIENT_ControllerSpecificFunction para satisfacer las necesidades específicas de determinadas plataformas de hardware. Los controladores típicos del controlador GPIO no implementan esta función. Un controlador de dispositivo periférico que usa IOCTL_GPIO_CONTROLLER_SPECIFIC_FUNCTION solicitudes para realizar una operación específica de hardware en una plataforma corre el riesgo de perder compatibilidad con otras plataformas que no admiten esta operación.
Normalmente, el CLIENT_ControllerSpecificFunction función programa el controlador GPIO para realizar una operación específica del hardware en un conjunto de patillas GPIO. El desarrollador define los parámetros de entrada y salida para esta operación para el controlador de controlador GPIO. Solo un controlador de dispositivo periférico que tenga en cuenta las operaciones concretas implementadas por un controlador de controlador GPIO puede solicitar estas operaciones.
Cuando GpioClx recibe una solicitud de IOCTL_GPIO_CONTROLLER_SPECIFIC_FUNCTION , comprueba si el controlador del controlador GPIO ha implementado una función de CLIENT_ControllerSpecificFunction . Si es así, GpioClx copia las descripciones de los búferes de entrada y salida del IOCTL a una estructura de GPIO_CLIENT_CONTROLLER_SPECIFIC_FUNCTION_PARAMETERS y pasa un puntero a esta estructura como parámetro a la función CLIENT_ControllerSpecificFunction . Si los valores de parámetro de la estructura GPIO_CLIENT_CONTROLLER_SPECIFIC_FUNCTION_PARAMETERS son válidos, la función realiza la operación solicitada y devuelve STATUS_SUCCESS.
Si GpioClx recibe una solicitud de IOCTL_GPIO_CONTROLLER_SPECIFIC_FUNCTION y el controlador del controlador GPIO no implementa una función de CLIENT_ControllerSpecificFunction , GpioClx completa el IOCTL con código de error STATUS_NOT_IMPLEMENTED.
Ejemplos
Para definir un CLIENT_ControllerSpecificFunction 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_ControllerSpecificFunction denominada MyEvtGpioControllerSpecificFunction
, use el tipo de función GPIO_CLIENT_CONTROLLER_SPECIFIC_FUNCTION, como se muestra en este ejemplo de código:
GPIO_CLIENT_CONTROLLER_SPECIFIC_FUNCTION MyEvtGpioControllerSpecificFunction;
A continuación, implemente la función de devolución de llamada de la siguiente manera:
_Use_decl_annotations_
NTSTATUS
MyEvtGpioControllerSpecificFunction(
PVOID Context,
PGPIO_CLIENT_CONTROLLER_SPECIFIC_FUNCTION_PARAMETERS Parameters
)
{ ... }
El tipo de función GPIO_CLIENT_CONTROLLER_SPECIFIC_FUNCTION 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_CONTROLLER_SPECIFIC_FUNCTION del 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. |