Método IMiniportWavePciStream::RevokeMappings (portcls.h)
O RevokeMappings
método revoga mapeamentos que foram 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 miniporte 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.
Retornar valor
RevokeMappings
retornará STATUS_SUCCESS se a chamada tiver sido bem-sucedida. Caso contrário, o método retorna um código de erro apropriado.
Comentários
O driver de porta chama RevokeMappings
para revogar os mapeamentos do fluxo quando:
- Uma solicitação de E/S (IRP) foi 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
método 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 entre eles. O driver de miniporto revoga cada mapeamento removendo-o da lista de mapeamentos disponíveis.
O RevokeMapping
método 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 WDK (Microsoft Windows Driver Kit), isso é feito ao redor das seções de código crítico com as 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 miniporte pode ter lançado anteriormente (consulte IPortWavePciStream::ReleaseMapping) um ou mais dos mapeamentos especificados na RevokeMappings
chamada.
Para obter mais informações sobre mapeamentos, consulte Latência WavePci.
Requisitos
Requisito | Valor |
---|---|
Plataforma de Destino | Universal |
Cabeçalho | portcls.h (inclua Portcls.h) |
IRQL | DISPATCH_LEVEL |
Confira também
IPortWavePciStream::GetMapping