Metodo IMiniportWavePciStream::RevokeMappings (portcls.h)
Il metodo RevokeMappings
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 tutti i mapping nell'intervallo FirstTag per lastTag che il driver miniport ha già rilasciato. 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 altre informazioni, vedere la sezione Osservazioni seguente.
Valore restituito
RevokeMappings
restituisce STATUS_SUCCESS se la chiamata ha avuto esito positivo. In caso contrario, il metodo restituisce un codice di errore appropriato.
Osservazioni
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 cambia in KSSTATE_STOP (vedere KSSTATE) e il dispositivo non ha più bisogno di mapping.
RevokeMapping
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 loro. Il driver miniport revoca ogni mapping rimuovendolo dall'elenco dei mapping disponibili.
Il metodo RevokeMapping
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 sulla 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 nelle sezioni di codice critiche con KeAcquireSpinLock e KeReleaseSpinLock chiamate. Poiché il driver miniport può rilasciare i 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ù dei mapping specificati nella chiamata RevokeMappings
.
Per altre informazioni sui mapping, vedere WavePci Latency.
Fabbisogno
Requisito | Valore |
---|---|
piattaforma di destinazione | Universale |
intestazione | portcls.h (include Portcls.h) |
IRQL | DISPATCH_LEVEL |
Vedere anche
IPortWavePciStream::GetMapping