Condividi tramite


Metodo IMiniportWavePciStream::RevokeMappings (portcls.h)

Il RevokeMappings metodo revoca i mapping ottenuti in precedenza tramite IPortWavePciStream::GetMapping.

Sintassi

NTSTATUS RevokeMappings(
  [in]  PVOID  FirstTag,
  [in]  PVOID  LastTag,
  [out] PULONG MappingsRevoked
);

Parametri

[in] FirstTag

Specifica il valore del tag che identifica il primo mapping revocato.

[in] LastTag

Specifica il valore del tag che identifica l'ultimo mapping revocato.

[out] MappingsRevoked

Puntatore di output per il conteggio dei mapping revocati. Questo parametro punta a una variabile ULONG in cui il metodo scrive il numero di mapping effettivamente revocati dalla chiamata. Questo numero esclude eventuali mapping nell'intervallo FirstTag in LastTag già rilasciato dal driver miniport. A causa di problemi di sincronizzazione, alcuni mapping nell'intervallo potrebbero essere rilasciati tra il momento in cui il driver della porta determina l'elenco dei mapping da revocare e la chiamata a RevokeMappings. Per ulteriori informazioni, vedere la sezione Osservazioni successiva.

Valore restituito

RevokeMappings restituisce STATUS_SUCCESS se la chiamata ha esito positivo. In caso contrario, il metodo restituisce un codice di errore appropriato.

Commenti

Il driver di porta chiama RevokeMappings per revocare i mapping del flusso quando:

  • Una richiesta di I/O viene annullata e la memoria mappata in precedenza potrebbe non essere più disponibile.
  • Lo stato del flusso viene modificato in KSSTATE_STOP (vedere KSSTATE) e il dispositivo non ha più bisogno dei mapping.
Il driver miniport tiene traccia dell'ordine in cui acquisisce i mapping dalle chiamate a IPortWavePciStream::GetMapping. Il RevokeMapping metodo revoca tutti i mapping nella sequenza che inizia con il mapping identificato da FirstTag e termina con il mapping identificato da LastTag. Sono inclusi i mapping identificati da FirstTag e LastTag e tutti i mapping tra. Il driver miniport revoca ogni mapping rimuovendolo dall'elenco dei mapping disponibili.

Il RevokeMapping metodo può essere usato per rimuovere un singolo mapping impostando FirstTag e LastTag sullo stesso valore.

Il driver di porta può chiamare RevokeMappings in modo asincrono rispetto alle operazioni di manutenzione del driver miniport nella coda di trasferimento a dispersione/raccolta del controller DMA. L'accesso a questa coda deve essere protetto da una primitiva di sincronizzazione. Ad esempio, nel driver audio di esempio ac97 in Microsoft Windows Driver Kit (WDK), questa operazione viene eseguita circondando le sezioni di codice critiche con chiamate KeAcquireSpinLock e KeReleaseSpinLock . Poiché il driver miniport può rilasciare mapping in modo asincrono rispetto alle chiamate del driver di porta a RevokeMappings, il driver miniport potrebbe essere stato rilasciato in precedenza (vedere IPortWavePciStream::ReleaseMapping) uno o più mapping specificati nella RevokeMappings chiamata.

Per altre informazioni sui mapping, vedere WavePci Latency.

Requisiti

Requisito Valore
Piattaforma di destinazione Universale
Intestazione portcls.h (includere Portcls.h)
IRQL DISPATCH_LEVEL

Vedi anche

IMiniportWavePciStream

IPortWavePciStream::GetMapping

IPortWavePciStream::ReleaseMapping

KSSTATE

KeAcquireSpinLock

KeReleaseSpinLock