Share via


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.
O driver de miniporto controla a ordem em que adquire seus mapeamentos de chamadas para IPortWavePciStream::GetMapping. O 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

IMiniportWavePciStream

IPortWavePciStream::GetMapping

IPortWavePciStream::ReleaseMapping

KSSTATE

KeAcquireSpinLock

KeReleaseSpinLock