Partilhar via


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.
O driver de miniporto controla a ordem na qual adquire seus mapeamentos de chamadas para IPortWavePciStream::GetMapping. O método 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

IMiniportWavePciStream

IPortWavePciStream::GetMapping

IPortWavePciStream::ReleaseMapping

KSSTATE

KeAcquireSpinLock

KeReleaseSpinLock