Partager via


EVT_SPB_CONTROLLER_WRITE fonction de rappel (spbcx.h)

La fonction de rappel d’événement evtSpbControllerIoWrite pilote de contrôleur SPB écrit des données dans l’appareil cible spécifié à partir des mémoires tampons fournies avec la requête d’écriture.

Syntaxe

EVT_SPB_CONTROLLER_WRITE EvtSpbControllerWrite;

void EvtSpbControllerWrite(
  [in] WDFDEVICE Controller,
  [in] SPBTARGET Target,
  [in] SPBREQUEST Request,
  [in] size_t Length
)
{...}

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

Un handle SPBREQUEST à la requête d’E/S. Votre pilote de contrôleur SPB doit effectuer cette requête en effectuant l’opération demandée ou en retournant un état d’erreur. Pour plus d’informations, consultez Remarques.

[in] Length

Nombre d’octets à écrire sur l’appareil cible.

Valeur de retour

Aucun

Remarques

SpbCx gère la file d’attente d’E/S pour le contrôleur SPB. SpbCx appelle le EvtSpbControllerIoWrite du pilote de contrôleur SPB fonction de rappel lorsqu’un client (pilote périphérique) du contrôleur SPB envoie une requête IRP_MJ_WRITE à un appareil cible attaché au bus. La valeur du paramètre requête est un handle qui encapsule cette requête.

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

Un rappel EvtSpbControllerIoWrite est asynchrone. Autrement dit, la fonction de rappel doit lancer l’opération d’écriture demandée, puis retourner sans attendre que l’opération se termine. Plus tard, le pilote du contrôleur SPB termine la demande d’écriture pendant une DPC d’interruption ou un DPC du minuteur.

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

Si l’opération d’écriture se termine en totalité, la fonction de rappel doit définir l’état d’achèvement sur STATUS_SUCCESS. Si l’appareil cible indique qu’il ne peut accepter plus de données avant la fin d’une transmission, le pilote doit définir l’état d’achèvement sur STATUS_SUCCESS et spécifier le nombre d’octets transmis.

Si une erreur de transmission se produit pendant l’opération d’écriture, le pilote doit définir l’état d’achèvement dans la demande d’E/S sur un code d’erreur approprié. Tous les bus ne fournissent pas un mécanisme permettant à un appareil cible de signaler une erreur de transport ou un transfert partiellement terminé, et tous les contrôleurs ne peuvent pas détecter ces conditions.

Pour inscrire une fonction de rappel EvtSpbControllerIoWrite, appelez la méthode SpbDeviceInitialize.

Exemples

Pour définir une EvtSpbControllerIoWrite fonction de rappel, 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 EvtSpbControllerIoWrite nommée MyEvtSpbControllerIoWrite, utilisez le type de fonction EVT_SPB_CONTROLLER_WRITE, comme illustré dans cet exemple de code :

EVT_SPB_CONTROLLER_WRITE  MyEvtSpbControllerIoWrite;

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

_Use_decl_annotations_
VOID
  MyEvtSpbControllerIoWrite(
    WDFDEVICE Controller,
    SPBTARGET Target,
    SPBREQUEST Request,
    size_t Length
    )
{ ... }

Le type de fonction EVT_SPB_CONTROLLER_WRITE 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_WRITE 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