Partager via


IMiniportWavePciStream ::RevokeMappings, méthode (portcls.h)

La méthode RevokeMappings 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 révoqué.

[in] LastTag

Spécifie la valeur de balise qui identifie le dernier mappage révoqué.

[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 réellement révoqués par l’appel. Ce nombre exclut les mappages de la plage FirstTag à LastTag que le pilote miniport a déjà publié. 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 Remarques suivante.

Valeur de retour

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 quand :

  • Une demande d’E/S (IRP) est annulée et la mémoire précédemment mappée peut ne plus être disponible.
  • L’état du flux passe à KSSTATE_STOP (voir KSSTATE) et l’appareil n’a plus besoin des mappages.
Le pilote miniport suit l’ordre dans lequel il acquiert ses mappages à partir d’appels à IPortWavePciStream ::GetMapping. La méthode RevokeMapping révoque tous les mappages de la séquence qui commencent 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 et tous les mappages entre eux. Le pilote miniport révoque chaque mappage en le supprimant de la liste des mappages disponibles.

La méthode RevokeMapping 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 nuages/de 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 dans le Kit de pilotes Microsoft Windows (WDK), cela s’effectue en entourant les sections de code critiques avec KeAcquireSpinLock et appels KeReleaseSpinLock. Étant donné que le pilote miniport peut libérer des mappages de manière asynchrone par rapport aux appels du pilote de port à RevokeMappings, le pilote miniport peut avoir précédemment publié (voir IPortWavePciStream ::ReleaseMapping) un ou plusieurs des mappages spécifiés dans l’appel RevokeMappings.

Pour plus d’informations sur les mappages, consultez de latence WavePci.

Exigences

Exigence Valeur
plateforme cible Universel
d’en-tête portcls.h (include Portcls.h)
IRQL DISPATCH_LEVEL

Voir aussi

IMiniportWavePciStream

IPortWavePciStream ::GetMapping

IPortWavePciStream ::ReleaseMapping

KSSTATE

KeAcquireSpinLock

KeReleaseSpinLock