Partager via


GPIO_CLIENT_CONTROLLER_SPECIFIC_FUNCTION fonction de rappel (gpioclx.h)

La fonction de rappel d’événement CLIENT_ControllerSpecificFunction effectue une opération spécifique à un contrôleur d’E/S (GPIO) à usage général particulier.

Syntaxe

GPIO_CLIENT_CONTROLLER_SPECIFIC_FUNCTION GpioClientControllerSpecificFunction;

NTSTATUS GpioClientControllerSpecificFunction(
  [in]      PVOID Context,
  [in, out] PGPIO_CLIENT_CONTROLLER_SPECIFIC_FUNCTION_PARAMETERS Parameters
)
{...}

Paramètres

[in] Context

Pointeur vers le contexte de périphérique du pilote du contrôleur GPIO.

[in, out] Parameters

Pointeur vers une structure GPIO_CLIENT_CONTROLLER_SPECIFIC_FUNCTION_PARAMETERS qui contient les mémoires tampons d’entrée et de sortie pour l’opération spécifique au contrôleur.

Valeur retournée

La fonction CLIENT_ControllerSpecificFunction retourne STATUS_SUCCESS si l’appel réussit. Les valeurs de retour possibles incluent les codes d’erreur suivants.

Code de retour Description
STATUS_NOT_SUPPORTED
Le contrôleur GPIO ne prend pas en charge l’opération spécifiée par les paramètres d’entrée.
STATUS_BUFFER_TOO_SMALL
La taille de la mémoire tampon d’entrée ou de la mémoire tampon de sortie est trop petite.

Remarques

En option, un pilote de contrôleur GPIO peut prendre en charge IOCTL_GPIO_CONTROLLER_SPECIFIC_FUNCTION demandes. Ce type de demande de contrôle d’E/S (IOCTL) effectue des opérations spécifiques au contrôleur au profit des pilotes de périphériques qui nécessitent ces opérations. Pour prendre en charge cet IOCTL, un pilote de contrôleur GPIO implémente une fonction CLIENT_ControllerSpecificFunction .

L’extension d’infrastructure GPIO (GpioClx) prend en charge la fonction CLIENT_ControllerSpecificFunction pour répondre aux besoins spécifiques de certaines plateformes matérielles. Les pilotes de contrôleur GPIO classiques n’implémentent pas cette fonction. Un pilote de périphérique qui utilise IOCTL_GPIO_CONTROLLER_SPECIFIC_FUNCTION demandes pour effectuer une opération spécifique au matériel sur une plateforme risque de perdre la compatibilité avec d’autres plateformes qui ne prennent pas en charge cette opération.

En règle générale, la fonction CLIENT_ControllerSpecificFunction programme le contrôleur GPIO pour effectuer une opération spécifique au matériel sur un ensemble de broches GPIO. Les paramètres d’entrée et de sortie de cette opération sont définis par le développeur pour le pilote de contrôleur GPIO. Seul un pilote de périphérique qui connaît les opérations particulières implémentées par un pilote de contrôleur GPIO peut demander ces opérations.

Lorsque GpioClx reçoit une demande de IOCTL_GPIO_CONTROLLER_SPECIFIC_FUNCTION , il vérifie si le pilote du contrôleur GPIO a implémenté une fonction CLIENT_ControllerSpecificFunction . Si c’est le cas, GpioClx copie les descriptions des mémoires tampons d’entrée et de sortie de l’IOCTL vers une structure GPIO_CLIENT_CONTROLLER_SPECIFIC_FUNCTION_PARAMETERS et transmet un pointeur vers cette structure en tant que paramètre vers la fonction CLIENT_ControllerSpecificFunction . Si les valeurs de paramètre dans la structure GPIO_CLIENT_CONTROLLER_SPECIFIC_FUNCTION_PARAMETERS sont valides, la fonction effectue l’opération demandée et retourne STATUS_SUCCESS.

Si GpioClx reçoit une demande de IOCTL_GPIO_CONTROLLER_SPECIFIC_FUNCTION et que le pilote du contrôleur GPIO n’implémente pas de fonction CLIENT_ControllerSpecificFunction, GpioClx termine iocTL avec le code d’erreur STATUS_NOT_IMPLEMENTED.

Exemples

Pour définir une fonction de rappel CLIENT_ControllerSpecificFunction , vous devez d’abord fournir une déclaration de fonction qui identifie le type de fonction de rappel que vous définissez. Windows fournit un ensemble de types de fonctions de rappel pour les pilotes. La déclaration d’une fonction à l’aide des types de fonction de rappel permet à l’analyse du code pour les pilotes, au vérificateur de pilotes statiques (SDV) et à d’autres outils de vérification de trouver des erreurs. Il s’agit d’une exigence pour l’écriture de pilotes pour le système d’exploitation Windows.

Par exemple, pour définir une fonction de rappel CLIENT_ControllerSpecificFunction nommée MyEvtGpioControllerSpecificFunction, utilisez le type de fonction GPIO_CLIENT_CONTROLLER_SPECIFIC_FUNCTION, comme indiqué dans cet exemple de code :

GPIO_CLIENT_CONTROLLER_SPECIFIC_FUNCTION MyEvtGpioControllerSpecificFunction;

Ensuite, implémentez votre fonction de rappel comme suit :

_Use_decl_annotations_
NTSTATUS
  MyEvtGpioControllerSpecificFunction(
    PVOID Context,
    PGPIO_CLIENT_CONTROLLER_SPECIFIC_FUNCTION_PARAMETERS Parameters
    )
{ ... }

Le type de fonction GPIO_CLIENT_CONTROLLER_SPECIFIC_FUNCTION est défini dans le fichier d’en-tête Gpioclx.h. Pour identifier plus précisément les erreurs lors de l’exécution des outils d’analyse du code, veillez à ajouter l’annotation Use_decl_annotations à votre définition de fonction. L’annotation Use_decl_annotations garantit que les annotations appliquées au type de fonction GPIO_CLIENT_CONTROLLER_SPECIFIC_FUNCTION dans le fichier d’en-tête sont utilisées. Pour plus d’informations sur la configuration requise pour les déclarations de fonction, consultez Déclaration de fonctions à l’aide de types de rôles de fonction pour les pilotes KMDF. Pour plus d’informations sur Use_decl_annotations, consultez Annotating Function Behavior.

Configuration requise

Condition requise Valeur
Client minimal pris en charge Pris en charge à partir de Windows 8.
Plateforme cible Desktop (Expérience utilisateur)
En-tête gpioclx.h
IRQL Appelé à PASSIVE_LEVEL.

Voir aussi

GPIO_CLIENT_CONTROLLER_SPECIFIC_FUNCTION_PARAMETERS

IOCTL_GPIO_CONTROLLER_SPECIFIC_FUNCTION