SpbControllerSetIoOtherCallback, fonction (spbcx.h)

La méthode SpbControllerSetIoOtherCallback enregistre la fonction de rappel EvtSpbControllerIoOther d’un pilote de contrôleur SPB.

Syntaxe

void SpbControllerSetIoOtherCallback(
  [in]           WDFDEVICE                    FxDevice,
  [in]           PFN_SPB_CONTROLLER_OTHER     EvtSpbControllerIoOther,
  [in, optional] PFN_WDF_IO_IN_CALLER_CONTEXT EvtIoInCallerContext
);

Paramètres

[in] FxDevice

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

[in] EvtSpbControllerIoOther

Pointeur vers une fonction de rappel EvtSpbControllerIoOther . Le pilote de contrôleur SPB implémente cette fonction. L’extension d’infrastructure SPB (SpbCx) appelle cette fonction pour passer une demande de contrôle d’E/S au pilote du contrôleur. Pour plus d’informations sur le type de demandes d’E/S passées à cette fonction, consultez la section Remarques suivante.

[in, optional] EvtIoInCallerContext

Pointeur vers une fonction de rappel EvtIoInCallerContext appelée lorsqu’une demande de contrôle d’E/S arrive pour la première fois dans la file d’attente d’E/S du contrôleur et que la demande contient un code IOCTL que l’extension d’infrastructure SPB (SpbCx) ne reconnaît pas. Ce rappel s’exécute dans le contexte de processus de l’initiateur de la demande et peut prétraiter les demandes qui seront traitées ultérieurement par le rappel EvtSpbControllerIoOther . Ce paramètre est facultatif et peut être spécifié comme NULL si aucun prétraitement n’est requis. Pour plus d'informations, consultez la section Notes qui suit.

Valeur de retour

None

Remarques

Cette méthode permet à votre pilote de contrôleur SPB de déclarer sa prise en charge des codes de contrôle d’E/S personnalisés (IOCTL) spécifiques au bus ou au pilote. Si le pilote du contrôleur SPB n’appelle pas cette méthode, SpbCx rejette toutes ces demandes de contrôle d’E/S, et le pilote du contrôleur SPB ne les voit jamais.

SpbCx gère la file d’attente d’E/S pour le contrôleur SPB. Par défaut, si SpbCx reçoit une demande de contrôle d’E/S qui a un IOCTL qu’il ne prend pas en charge, SpbCx termine la demande avec l’erreur status code STATUS_INVALID_DEVICE_REQUEST.

Toutefois, en appelant SpbControllerSetIoOtherCallback, le pilote de contrôleur SPB déclare sa prise en charge des demandes de contrôle d’E/S que l’extension d’infrastructure SPB (SpbCx) ne prend pas en charge. Dans ce cas, lorsque SpbCx reçoit une demande de contrôle d’E/S qui a un code IOCTL qu’il ne prend pas en charge, SpbCx appelle la fonction EvtSpbControllerIoOther pour transmettre la demande au pilote du contrôleur SPB pour traitement. Le pilote du contrôleur SPB est responsable de l’exécution de la demande.

Pour obtenir la liste des IOCTL pris en charge par SpbCx, consultez Codes de contrôle d’E/S S SpbCx.

La fonction de rappel EvtIoInCallerContext facultative s’exécute dans le contexte de processus de l’initiateur de la demande et peut prétraiter les paramètres de requête dépendant du contexte, tels que les pointeurs de mémoire tampon, avant que la requête ne soit passée à la fonction de rappel EvtSpbControllerIoOther . Lorsque la fonction EvtIoInCallerContext est appelée, tout contexte par requête demandé par le pilote du contrôleur SPB lors d’un appel précédent à SpbControllerSetRequestAttributes est déjà alloué et affecté à la demande.

Le pilote du contrôleur SPB doit appeler cette méthode avant de valider l’objet de périphérique, c’est-à-dire avant qu’il ne retourne à partir du rappel EvtDriverDeviceAdd ou qu’il ajoute l’ADO à la liste enfant du contrôleur. La liste enfant représente les appareils qui sont attachés au bus. Pour plus d’informations, consultez Énumération des appareils sur un bus.

Configuration requise

Condition requise Valeur
Client minimal pris en charge Disponible à partir de Windows 8.
Plateforme cible Universal
En-tête spbcx.h
Bibliothèque Spbcxstubs.lib
IRQL PASSIVE_LEVEL

Voir aussi

EvtIoInCallerContext

EvtSpbControllerIoOther

SpbControllerSetRequestAttributes