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