Partager via


EVT_SPB_CONTROLLER_OTHER fonction de rappel (spbcx.h)

La fonction de rappel d’événements evtSpbControllerIoOther du pilote de contrôleur SPB gère les demandes de contrôle d’E/S d’appareil qui ne sont pas gérées par d’autres fonctions de rappel d’événements ou par l’extension de framework SPB (SpbCx).

Syntaxe

EVT_SPB_CONTROLLER_OTHER EvtSpbControllerOther;

void EvtSpbControllerOther(
  [in] WDFDEVICE Controller,
  [in] SPBTARGET Target,
  [in] SPBREQUEST Request,
  [in] size_t OutputBufferLength,
  [in] size_t InputBufferLength,
  [in] ULONG IoControlCode
)
{...}

Paramètres

[in] Controller

Handle WDFDEVICE pour l’objet d’appareil framework qui représente le contrôleur SPB.

[in] Target

Un SPBTARGET de gérer la cible pour cette requête d’E/S. La cible est un périphérique ou un port attaché au bus. L’extension de framework SPB (SpbCx) a précédemment affecté ce handle à la cible dans le EvtSpbTargetConnect rappel qui a ouvert la connexion à la cible.

[in] Request

Le handle SPBREQUEST à la requête d’E/S. Votre pilote de contrôleur SPB doit effectuer cette requête. Pour plus d’informations, consultez Remarques.

[in] OutputBufferLength

Longueur, en octets, de la mémoire tampon de sortie, si une mémoire tampon de sortie est fournie avec la requête.

[in] InputBufferLength

Longueur, en octets, de la mémoire tampon d’entrée, si une mémoire tampon d’entrée est fournie avec la requête.

[in] IoControlCode

Code de contrôle d’E/S (IOCTL) pour la demande. Cette valeur est une IOCTL que l’extension de framework SPB (SpbCx) ne reconnaît pas. Pour plus d’informations, consultez Remarques.

Valeur de retour

Aucun

Remarques

SpbCx gère la file d’attente d’E/S pour le contrôleur SPB. Si le pilote du contrôleur SPB inscrit un EvtSpbControllerIoOther fonction de rappel, SpbCx appelle cette fonction lorsqu’une demande de contrôle d’E/S d’appareil que SpbCx ne prend pas en charge arrive dans la file d’attente d’E/S du contrôleur. La valeur du paramètre requête est un handle qui encapsule cette requête. Le pilote du contrôleur SPB doit effectuer cette requête en effectuant l’opération demandée ou en retournant un état d’erreur. Si le pilote ne prend pas en charge le IOCTL spécifié, le pilote doit retourner l’état d’erreur STATUS_NOT_SUPPORTED. Pour obtenir la liste des IOCTL pris en charge par SpbCx, consultez codes de contrôle d’E/S SpbCx.

Le rappel EvtSpbControllerIoOther permet aux commandes spécifiques au bus ou au pilote d’être envoyées au pilote du contrôleur SPB en tant que IOCTLs. Par exemple, les clients (pilotes périphériques) peuvent utiliser ces IOCTL pour coordonner les opérations spécifiques au bus, telles que les échanges de données duplex complets avec un appareil cible sur un bus SPI. Ces IOCTL sont soumis au même contrôle de flux que les IOCTL pris en charge par SpbCx.

La fonction de rappel EvtSpbControllerIoOther est similaire à la EvtIoDeviceControl et traite les IOCTL d’une manière similaire. Pour obtenir des informations générales sur la façon dont les pilotes WDF gèrent les requêtes d’E/S, consultez Framework Request Objects.

Un rappel EvtSpbControllerIoOther ne retourne pas de valeur d’état. Au lieu de cela, le pilote du contrôleur SPB indique l’état de l’opération demandée dans l’état d’achèvement de la demande d’E/S.

Si une requête d’E/S ne peut pas être effectuée immédiatement, la fonction de rappel doit retourner sans attendre que le pilote du contrôleur SPB termine le traitement de la requête. Le pilote du contrôleur SPB peut terminer la requête de manière asynchrone.

Une fonction EvtSpbControllerIoOther doit valider les valeurs de paramètre dans les demandes de contrôle d’E/S qu’elle reçoit des clients en mode utilisateur. Pour toutes les fonctions de rappel evtSpb Xxx autres que EvtSpbControllerIoOther, SpbCx valide les paramètres en mode utilisateur avant d’appeler la fonction.

Pour inscrire une fonction de rappel EvtSpbControllerIoOther, appelez la méthode SpbControllerSetIoOther.

Exemples

Pour définir une fonction de rappel EvtSpbControllerIoOther, 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 fonctions de rappel permet d'Analyse du code pour les pilotes, static Driver Verifier (SDV) et d’autres outils de vérification recherchent des erreurs, et il est nécessaire d’écrire des pilotes pour le système d’exploitation Windows.

Par exemple, pour définir une fonction de rappel EvtSpbControllerIoOther nommée MyEvtSpbControllerIoOther, utilisez le type de fonction EVT_SPB_CONTROLLER_OTHER, comme illustré dans cet exemple de code :

EVT_SPB_CONTROLLER_OTHER  MyEvtSpbControllerIoOther;

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

_Use_decl_annotations_
VOID
  MyEvtSpbControllerIoOther(
    WDFDEVICE Controller,
    SPBTARGET Target,
    SPBREQUEST Request,
    size_t OutputBufferLength,
    size_t InputBufferLength,
    ULONG IoControlCode
    )
{ ... }

Le type de fonction EVT_SPB_CONTROLLER_OTHER est défini dans le fichier d’en-tête Spbcx.h. Pour identifier plus précisément les erreurs lorsque vous exécutez les 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 EVT_SPB_CONTROLLER_OTHER 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 annoter le comportement de la fonction.

Exigences

Exigence Valeur
client minimum pris en charge Prise en charge à partir de Windows 8.
plateforme cible Bureau
d’en-tête spbcx.h
IRQL Appelé au <IRQL = DISPATCH_LEVEL.

Voir aussi

EvtIoDeviceControl

EvtSpbTargetConnect

SPBREQUEST

SPBTARGET

SpbControllerSetIoOther