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.
Le pilote miniport effectue le suivi de l’ordre dans lequel il acquiert ses mappages à partir des appels à IPortWavePciStream ::GetMapping. La 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

IMiniportWavePciStream

IPortWavePciStream ::GetMapping

IPortWavePciStream ::ReleaseMapping

KSSTATE

KeAcquireSpinLock

KeReleaseSpinLock