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


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

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

Синтаксис

NTSTATUS ReleaseMapping(
  [in] PVOID Tag
);

Параметры

[in] Tag

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

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

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

Замечания

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

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

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

Требования

Требование Ценность
целевая платформа Всеобщий
заголовка portcls.h (include Portcls.h)
IRQL <=DISPATCH_LEVEL

См. также

IMiniportWavePciStream::RevokeMappings

IPortWavePciStream

IPortWavePciStream::GetMapping

KeAcquireSpinLock

KeReleaseSpinLock