Метод IMiniportWavePciStream::RevokeMappings (portcls.h)

Метод RevokeMappings отменяет сопоставления, которые ранее были получены с помощью IPortWavePciStream::GetMapping.

Синтаксис

NTSTATUS RevokeMappings(
  [in]  PVOID  FirstTag,
  [in]  PVOID  LastTag,
  [out] PULONG MappingsRevoked
);

Параметры

[in] FirstTag

Задает значение тега, определяющее первое отозваемое сопоставление.

[in] LastTag

Задает значение тега, определяющее последнее отозваемое сопоставление.

[out] MappingsRevoked

Выходной указатель для количества отозванных сопоставлений. Этот параметр указывает на переменную ULONG, в которую метод записывает количество сопоставлений, фактически отозванных вызовом. Это число исключает все сопоставления в диапазоне FirstTag и LastTag , которые уже выпущены драйвером мини-порта. Из-за проблем синхронизации некоторые сопоставления в диапазоне могут быть освобождены между моментом, когда драйвер порта определяет список отозванных сопоставлений, и вызовом RevokeMappings. Дополнительные сведения см. в разделе "Примечания".

Возвращаемое значение

RevokeMappings возвращает STATUS_SUCCESS, если вызов был выполнен успешно. В противном случае метод возвращает соответствующий код ошибки.

Комментарии

Драйвер порта вызывает RevokeMappings для отмены сопоставлений потока в следующих случаях:

  • Запрос ввода-вывода (IRP) отменяется, и ранее сопоставленная память может быть недоступна.
  • Состояние потока изменится на KSSTATE_STOP (см. раздел KSSTATE), и устройство больше не нуждается в сопоставлениях.
Драйвер мини-порта отслеживает порядок, в котором он получает свои сопоставления из вызовов IPortWavePciStream::GetMapping. Метод RevokeMapping отменяет все сопоставления в последовательности, которая начинается с сопоставления, определяемого FirstTag, и заканчивается сопоставлением, определенным LastTag. Сюда входят сопоставления, определенные FirstTag и LastTag , а также все сопоставления между ними. Драйвер мини-порта отменяет каждое сопоставление, удаляя его из списка доступных сопоставлений.

Метод RevokeMapping можно использовать для удаления одного сопоставления, задав для FirstTag и LastTag одно и то же значение.

Драйвер порта может асинхронно вызывать RevokeMappings в отношении операций обслуживания драйвера мини-порта в очереди передачи точечной или сборной передачи контроллера DMA. Доступ к этой очереди должен быть защищен примитивом синхронизации. Например, в примере аудиодрайва ac97 в комплекте драйверов Microsoft Windows (WDK) это делается путем окружения критически важных разделов кода с вызовами KeAcquireSpinLock и KeReleaseSpinLock . Так как драйвер мини-порта может асинхронно освобождать сопоставления относительно вызовов драйвера порта в RevokeMappings, драйвер мини-порта, возможно, ранее выпустил (см. IPortWavePciStream::ReleaseMapping) одно или несколько сопоставлений, указанных в вызове RevokeMappings .

Дополнительные сведения о сопоставлениях см. в разделе Задержка WavePci.

Требования

Требование Значение
Целевая платформа Универсальное
Верхняя часть portcls.h (включая Portcls.h)
IRQL DISPATCH_LEVEL

См. также раздел

IMiniportWavePciStream

IPortWavePciStream::GetMapping

IPortWavePciStream::ReleaseMapping

KSSTATE

KeAcquireSpinLock

KeReleaseSpinLock