Método IMiniportWavePciStream::RevokeMappings (portcls.h)
O método RevokeMappings
revoga mapeamentos obtidos anteriormente por meio de IPortWavePciStream::GetMapping.
Sintaxe
NTSTATUS RevokeMappings(
[in] PVOID FirstTag,
[in] PVOID LastTag,
[out] PULONG MappingsRevoked
);
Parâmetros
[in] FirstTag
Especifica o valor da marca que identifica o primeiro mapeamento que está sendo revogado.
[in] LastTag
Especifica o valor da marca que identifica o último mapeamento que está sendo revogado.
[out] MappingsRevoked
Ponteiro de saída para a contagem de mapeamentos revogados. Esse parâmetro aponta para uma variável ULONG na qual o método grava o número de mapeamentos realmente revogados pela chamada. Esse número exclui todos os mapeamentos no intervalo FirstTag para LastTag que o driver de miniporto já liberou. Devido a problemas de sincronização, alguns dos mapeamentos no intervalo podem ser liberados entre o momento em que o driver de porta determina a lista de mapeamentos a serem revogados e a chamada para RevokeMappings
. Para obter mais informações, consulte a seção Comentários a seguir.
Valor de retorno
RevokeMappings
retornará STATUS_SUCCESS se a chamada tiver sido bem-sucedida. Caso contrário, o método retornará um código de erro apropriado.
Observações
O driver de porta chama RevokeMappings
para revogar os mapeamentos do fluxo quando:
- Uma solicitação de E/S (IRP) é cancelada e a memória mapeada anteriormente pode não estar mais disponível.
- O estado do fluxo muda para KSSTATE_STOP (consulte KSSTATE) e o dispositivo não precisa mais dos mapeamentos.
RevokeMapping
revoga todos os mapeamentos na sequência que começa com o mapeamento identificado por firsttag e termina com o mapeamento identificado por LastTag. Isso inclui os mapeamentos identificados por firsttag e LastTag e todos os mapeamentos no meio. O driver de miniporto revoga cada mapeamento removendo-o da lista de mapeamentos disponíveis.
O método RevokeMapping
pode ser usado para remover um único mapeamento definindo FirstTag e LastTag com o mesmo valor.
O driver de porta pode chamar RevokeMappings
de forma assíncrona em relação às operações de manutenção do driver de miniporto na fila de transferência de dispersão/coleta do controlador DMA. O acesso a essa fila precisa ser protegido por um primitivo de sincronização. Por exemplo, no driver de áudio de exemplo ac97 no Microsoft Windows Driver Kit (WDK), isso é feito ao cercar seções de código crítico com chamadas KeAcquireSpinLock e KeReleaseSpinLock. Como o driver de miniporto pode liberar mapeamentos de forma assíncrona em relação às chamadas do driver de porta para RevokeMappings
, o driver de miniporto pode ter sido lançado anteriormente (consulte IPortWavePciStream::ReleaseMapping) um ou mais dos mapeamentos especificados na chamada RevokeMappings
.
Para obter mais informações sobre mapeamentos, consulte de Latência WavePci.
Requisitos
Requisito | Valor |
---|---|
da Plataforma de Destino | Universal |
cabeçalho | portcls.h (inclua Portcls.h) |
IRQL | DISPATCH_LEVEL |
Consulte também
IPortWavePciStream::GetMapping