Méthode IMiniportWavePciStream ::RevokeMappings (portcls.h)
La RevokeMappings
méthode révoque les mappages précédemment obtenus via IPortWavePciStream ::GetMapping.
Syntaxe
NTSTATUS RevokeMappings(
[in] PVOID FirstTag,
[in] PVOID LastTag,
[out] PULONG MappingsRevoked
);
Paramètres
[in] FirstTag
Spécifie la valeur de balise qui identifie le premier mappage en cours de révocation.
[in] LastTag
Spécifie la valeur de balise qui identifie le dernier mappage en cours de révocation.
[out] MappingsRevoked
Pointeur de sortie pour le nombre de mappages révoqués. Ce paramètre pointe vers une variable ULONG dans laquelle la méthode écrit le nombre de mappages effectivement révoqués par l’appel. Ce nombre exclut les mappages dans la plage FirstTag à LastTag que le pilote miniport a déjà libérés. En raison de problèmes de synchronisation, certains mappages de la plage peuvent être libérés entre le moment où le pilote de port détermine la liste des mappages à révoquer et l’appel à RevokeMappings
. Pour plus d'informations, consultez la section Notes qui suit.
Valeur retournée
RevokeMappings
retourne STATUS_SUCCESS si l’appel a réussi. Sinon, la méthode retourne un code d’erreur approprié.
Remarques
Le pilote de port appelle RevokeMappings
pour révoquer les mappages du flux lorsque :
- Une demande d’E/S (IRP) est annulée et la mémoire mappée précédemment n’est peut-être plus disponible.
- L’état du flux passe à KSSTATE_STOP (voir KSSTATE) et l’appareil n’a plus besoin des mappages.
RevokeMapping
méthode révoque tous les mappages de la séquence qui commence par le mappage identifié par FirstTag et se termine par le mappage identifié par LastTag. Cela inclut les mappages identifiés par FirstTag et LastTag , ainsi que tous les mappages entre les deux. Le pilote miniport révoque chaque mappage en le supprimant de la liste des mappages disponibles.
La RevokeMapping
méthode peut être utilisée pour supprimer un mappage unique en définissant FirstTag et LastTag sur la même valeur.
Le pilote de port peut appeler RevokeMappings
de manière asynchrone en ce qui concerne les opérations de maintenance du pilote miniport sur la file d’attente de transfert de diffusion/collecte du contrôleur DMA. L’accès à cette file d’attente doit être protégé par une primitive de synchronisation. Par exemple, dans l’exemple de pilote audio ac97 du Kit de pilotes Microsoft Windows (WDK), cela s’effectue en entourant les sections de code critiques avec des appels KeAcquireSpinLock et KeReleaseSpinLock . Étant donné que le pilote miniport peut libérer des mappages de manière asynchrone en ce qui concerne les appels du pilote de port à RevokeMappings
, le pilote miniport a peut-être déjà publié (voir IPortWavePciStream ::ReleaseMapping) un ou plusieurs mappages spécifiés dans l’appel RevokeMappings
.
Pour plus d’informations sur les mappages, consultez Latence WavePci.
Configuration requise
Condition requise | Valeur |
---|---|
Plateforme cible | Universal |
En-tête | portcls.h (include Portcls.h) |
IRQL | DISPATCH_LEVEL |
Voir aussi
IPortWavePciStream ::GetMapping