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 变量,方法在其中写入调用实际撤消的映射数。 此数字不包括微型端口驱动程序已发布的范围 FirstTagLastTag 中的任何映射。 由于同步问题,在端口驱动程序确定要撤消的映射列表和对 的调用 RevokeMappings之间,可能会释放该范围内的某些映射。 有关更多信息,请参见下面的“备注”部分。

返回值

RevokeMappings 如果调用成功,则返回STATUS_SUCCESS。 否则,该方法将返回相应的错误代码。

注解

在以下情况下,端口驱动程序调用 RevokeMappings 以撤消流的映射:

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

方法 RevokeMapping 可用于通过将 FirstTagLastTag 设置为相同的值来删除单个映射。

端口驱动程序可以针对 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