EVT_SPB_CONTROLLER_UNLOCK fonction de rappel (spbcx.h)
La fonction de rappel d’événement EvtSpbControllerUnlock du pilote de contrôleur SPB déverrouille le contrôleur SPB, qui a été verrouillé par un appel précédent à la fonction de rappel d’événement EvtSpbControllerLock.
Syntaxe
EVT_SPB_CONTROLLER_UNLOCK EvtSpbControllerUnlock;
void EvtSpbControllerUnlock(
[in] WDFDEVICE Controller,
[in] SPBTARGET Target,
[in] SPBREQUEST UnlockRequest
)
{...}
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] UnlockRequest
Un SPBREQUEST de gérer une demande de contrôle d’E/S pour déverrouiller le contrôleur. 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.
Valeur de retour
Aucun
Remarques
SpbCx gère la file d’attente d’E/S pour le contrôleur SPB. SpbCx appelle cette fonction lorsqu’un client (pilote périphérique) du contrôleur envoie une requête IOCTL_SPB_UNLOCK_CONTROLLER à une cible sur le bus. La valeur du paramètre UnlockRequest est un handle qui encapsule cette requête.
Les fonctions EvtSpbControllerLock et EvtSpbControllerUnlock effectuent des opérations complémentaires. Les deux fonctions sont facultatives. Si votre pilote de contrôleur SPB implémente une fonction EvtSpbControllerUnlock, le pilote n’est pas nécessaire pour implémenter une fonction EvtSpbControllerLock, mais peut le faire. Toutefois, si votre pilote de contrôleur SPB implémente une fonction EvtSpbControllerLock, elle doit également implémenter une fonction EvtSpbControllerUnlock. Pour plus d’informations, consultez Remarques dans SPB_CONTROLLER_CONFIG.
Si le pilote du contrôleur SPB doit modifier le mode de son contrôleur pour restaurer la sélection cible normale, il peut le faire pendant la EvtSpbControllerUnlock rappel. Si ce changement de mode implique un retard long ou nécessite que le pilote attende une interruption de périphérique, le pilote doit lancer le changement de mode, puis revenir du rappel sans délai. Plus tard, le pilote peut terminer la demande de déverrouillage dans une DPC d’interruption ou un DPC du minuteur.
Un rappel EvtSpbControllerUnlock doit éviter d’échouer une demande de déverrouillage. Si vérificateur de pilotes est activé, un tel échec déclenche une interruption de vérificateur, qui signale au gestionnaire Plug-and-Play que le contrôleur a échoué. SpbCx ignore l’échec d’une demande de déverrouillage et n’essaie pas de gérer ou d’atténuer l’échec.
La fonction EvtSpbControllerUnlock ne retourne pas de valeur. Au lieu de cela, le pilote du contrôleur SPB indique l’état de l’opération de déverrouillage dans l’état d’achèvement de la demande d’E/S identifiée par le paramètre UnlockRequest. Définissez l’état d’achèvement sur STATUS_SUCCESS.
Pour inscrire une fonction de rappel EvtSpbControllerUnlock, appelez la méthode SpbDeviceInitialize.
Pour plus d’informations sur la fonction EvtSpbControllerUnlock, consultez Gestion des séquences Client-Implemented.
Exemples
Pour définir une EvtSpbControllerUnlock 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 EvtSpbControllerUnlock nommée MyEvtSpbControllerUnlock
, utilisez le type de fonction EVT_SPB_CONTROLLER_UNLOCK, comme illustré dans cet exemple de code :
EVT_SPB_CONTROLLER_UNLOCK MyEvtSpbControllerUnlock;
Ensuite, implémentez votre fonction de rappel comme suit :
_Use_decl_annotations_
VOID
MyEvtSpbControllerUnlock(
WDFDEVICE Controller,
SPBTARGET Target,
SPBREQUEST UnlockRequest
)
{ ... }
Le type de fonction EVT_SPB_CONTROLLER_UNLOCK 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_UNLOCK 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. |