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 来撤销流的映射:

  • I/O 请求(IRP)已取消,并且以前映射的内存可能不再可用。
  • 流状态更改为KSSTATE_STOP(请参阅 KSSTATE),并且设备不再需要映射。
微型端口驱动程序跟踪从调用到 IPortWavePciStream::GetMapping获取其映射的顺序。 RevokeMapping 方法将撤销序列中的所有映射,该映射以 FirstTag 标识的映射开头,最后由 LastTag标识的映射结束。 这包括由 FirstTag 标识的映射,以及 LastTag 以及介于之间的所有映射。 微型端口驱动程序通过从可用映射列表中删除它来撤销每个映射。

通过将 firstTag LastTag 设置为相同的值,可以使用RevokeMapping 方法删除单个映射。

端口驱动程序可以在 DMA 控制器的散点/收集传输队列上异步调用 RevokeMappings 微型端口驱动程序的维护作。 需要通过同步基元保护对此队列的访问。 例如,在 Microsoft Windows 驱动程序工具包(WDK)中的 ac97 示例音频驱动程序中,这是通过使用 KeAcquireSpinLockKeReleaseSpinLock 调用围绕关键代码部分完成的。 由于微型端口驱动程序可以在端口驱动程序调用 RevokeMappings时异步释放映射,因此微型端口驱动程序可能之前已发布(请参阅 IPortWavePciStream::ReleaseMapping)在 RevokeMappings 调用中指定的一个或多个映射。

有关映射的详细信息,请参阅 WavePci 延迟

要求

要求 价值
目标平台 普遍
标头 portcls.h (包括 Portcls.h)
IRQL DISPATCH_LEVEL

另请参阅

IMiniportWavePciStream

IPortWavePciStream::GetMapping

IPortWavePciStream::ReleaseMapping

KSSTATE

KeAcquireSpinLock

KeReleaseSpinLock