Partager via


Handles d’objet SpbCx

Cette rubrique décrit les handles d’objet qui sont définis pour la bibliothèque d’extension d’infrastructure SPB (SpbCx).

En outre, le DDI SerCx2 utilise deux des types de handle d’objets génériques, WDFDEVICE et WDFREQUEST, qui sont définis par le Kernel-Mode Driver Framework (KMDF). Pour plus d’informations sur les types de handle d’infrastructure, consultez Résumé des objets framework.

Cette rubrique décrit les handles d’objets suivants :

En-tête : Spbcx.h

SPBREQUEST, handle d’objet

Un handle d’objet SPBREQUEST représente une demande d’E/S émise sur un appareil cible sur le bus.

DECLARE_HANDLE(SPBREQUEST)

La classe d’objets SPBREQUEST est dérivée de la classe d’objet WDFREQUEST , qui représente une demande d’E/S distribuée par le gestionnaire d’E/S. Ainsi, les méthodes WdfRequestXxx qui prennent des valeurs de handle WDFREQUEST en tant que paramètres acceptent les valeurs de handle SPBREQUEST comme valeurs de paramètre valides. Pour plus d’informations sur ces méthodes, consultez Framework Request Objects.

Toutefois, certaines méthodes SpbCx et certaines fonctions de rappel nécessitent spécifiquement des handles SPBREQUEST en tant que paramètres. Pour un tel paramètre, le remplacement d’un handle WDFREQUEST qui n’est pas également un handle SPBREQUEST est une erreur.

Par exemple, la méthode SpbRequestGetTransferParameters prend un handle SPBREQUEST en tant que paramètre. Pour fournir, pour ce paramètre, un handle WDFREQUEST qui n’est pas également un handle SPBREQUEST est une erreur. La raison de cette exigence est qu’un objet SPBREQUEST doit stocker des informations d’état supplémentaires spécifiques à SPB pour prendre en charge les séquences de transfert d’E/S. La classe d’objets de base WDFREQUEST ne fournit pas cette prise en charge.

Pendant l’initialisation de l’appareil, votre pilote de contrôleur SPB peut affecter un contexte par requête à un handle SPBREQUEST en appelant la méthode SpbControllerSetRequestAttributes .

Handle d’objet SPBTARGET

Un handle d’objet SPBTARGET identifie une connexion logique d’un client (pilote périphérique) à un port adressable ou à un périphérique sur le bus.

DECLARE_HANDLE(SPBTARGET)

Pour un bus I2C, un handle SPBTARGET correspond à une adresse d’appareil spécifique.
Pour un bus SPI, un handle SPBTARGET correspond à une ligne de sélection d’appareil.

En règle générale, un objet SPBTARGET existe à partir du début du rappel d’événement EvtSpbTargetConnect jusqu’à la fin du rappel d’événement EvtSpbTargetDisconnect correspondant. Toutefois, la durée de vie de l’objet SPBTARGET peut s’étendre au-delà du deuxième rappel si le pilote du contrôleur SPB prend une référence supplémentaire sur l’objet SPBTARGET pour empêcher la disparition inattendue de l’objet pendant le traitement d’une demande d’E/S pour la cible.

Le pilote du contrôleur SPB effectue toutes les opérations spécifiques au matériel pour un périphérique contrôleur SPB. Lorsqu’un client envoie une IRP_MJ_CREATE demande d’ouverture d’une connexion à une cible sur le bus, l’extension de l’infrastructure SPB (SpbCx), qui gère la file d’attente d’E/S pour le pilote du contrôleur, transmet cette demande au pilote du contrôleur SPB en appelant la fonction de rappel EvtSpbTargetConnect de ce pilote. Ce paramètre Target de cette fonction est un handle SPBTARGET . La fonction peut utiliser ce handle pour récupérer des informations de ressource spécifiques à la connexion (par exemple, l’adresse de l’appareil) à partir du gestionnaire PnP. Lorsque le client envoie une IRP_MJ_CLOSE demande de fermeture de la connexion, SpbCx transmet cette demande à la fonction de rappel EvtSpbTargetDisconnect du pilote du contrôleur SPB, qui libère ces ressources.

accès Exclusive-Mode

Les clients disposent d’un mode exclusif pour accéder aux appareils cibles. Un seul client peut avoir une connexion à un appareil cible particulier à la fois. SpbCx garantit qu’il n’existe qu’un seul handle SPBTARGET pour une adresse d’appareil cible sur le bus. Cette restriction est nécessaire, car SpbCx ne prend pas en charge l’entrelacement des demandes d’E/S envoyées par deux clients ou plus à un appareil cible. Si un appareil cible doit être en mesure de recevoir des requêtes de plusieurs clients, cet appareil nécessite un pilote MUX(distinct du pilote de contrôleur) qui peut entrelacer correctement les opérations demandées.

Interopérabilité avec KMDF

Les méthodes de prise en charge du pilote SerCx2 et les fonctions de rappel d’événements SpbCx définies par SpbCx utilisent des handles SPBTARGET pour représenter les connexions ouvertes aux appareils cibles sur le bus. Toutefois, un pilote de contrôleur doit généralement appeler des méthodes KMDF qui nécessitent des handles WDFFILEOBJECT, au lieu de handles SPBTARGET , pour désigner des appareils cibles.

Un objet SPBTARGET est similaire à un objet WDFFILEOBJECT. Toutefois, un objet SPBTARGET contient des informations supplémentaires spécifiques à SPB. Par exemple, pendant le traitement d’une demande de contrôle d’E /S IOCTL_SPB_EXECUTE_SEQUENCE, l’objet SPBTARGET de l’appareil cible suit l’état des transferts dans la séquence de transfert d’E/S.

Pour obtenir le handle WDFFILEOBJECT sur une cible, le pilote du contrôleur SPB appelle la méthode SpbTargetGetFileObject . Cette méthode accepte, en tant que paramètre d’entrée, un handle SPBTARGET sur un appareil cible ouvert et retourne le handle WDFFILEOBJECT correspondant à cette cible.

Conformément aux conventions KMDF, le pilote de contrôleur SPB peut attacher son propre contexte à l’objet SPBTARGET pour un appareil cible, et ce contexte peut inclure les fonctions de rappel EvtCleanupCallback et EvtDestroyCallback associées . Le pilote de contrôleur SPB utilise ce contexte pour suivre les informations spécifiques au pilote du contrôleur et à l’appareil cible. En outre, ce pilote peut créer des objets enfants de l’objet SPBTARGET , tels que des minuteurs, des PDC ou, si nécessaire, des demandes d’E/S et des files d’attente d’E/S.