Поделиться через


Метод 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 (include Portcls.h)
IRQL DISPATCH_LEVEL

См. также

IMiniportWavePciStream

IPortWavePciStream::GetMapping

IPortWavePciStream::ReleaseMapping

KSSTATE

KeAcquireSpinLock

KeReleaseSpinLock