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


Метод IPortWavePciStream::ReleaseMapping (portcls.h)

Метод ReleaseMapping освобождает сопоставление, полученное при предыдущем вызове IPortWavePciStream::GetMapping.

Синтаксис

NTSTATUS ReleaseMapping(
  [in] PVOID Tag
);

Параметры

[in] Tag

Задает значение тега, определяющее сопоставление, которое должно быть освобождено. Дополнительные сведения см. в разделе "Примечания".

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

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

Комментарии

Задайте для параметра Tag то же значение тега, которое использовалось для идентификации сопоставления в вызове IPortWavePciStream::GetMapping , который первоначально получил сопоставление.

Драйвер мини-порта должен отслеживать порядок, в котором он получает свои сопоставления из вызовов IPortWavePciStream::GetMapping, и должен освободить сопоставления в том же порядке.

Чтобы избежать потенциальных взаимоблокировок, драйвер мини-порта должен избегать удержания спин-блокировки во время вызова .ReleaseMapping Пример кода, использующий спин-блокировку для сериализации доступа к общим структурам данных и периферийным устройствам в многопроцессорной системе, см. в примере аудиодрайва ac97 в комплекте драйверов Microsoft Windows (WDK). Пример кода вызывает KeReleaseSpinLock перед вызовом ReleaseMapping и KeAcquireSpinLock после вызова ReleaseMapping. Между вызовами для освобождения и получения спин-блокировки поток драйвера не должен предполагать, что он имеет монопольный доступ к данным или периферийным устройствам, защищенным спин-блокировкой. Средство проверки драйверов (см. описание этого средства на веб-сайте средства проверки драйверов) проверяет наличие активных блокировок спина во время вызовов ; ReleaseMappingесли он обнаруживает его, он создает 0xC4 (обнаружение взаимоблокировки) проверка ошибок.

Требования

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

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

IMiniportWavePciStream::RevokeMappings

IPortWavePciStream

IPortWavePciStream::GetMapping

KeAcquireSpinLock

KeReleaseSpinLock