FREE_FUNCTION_EX回调函数 (wdm.h)

LookasideListFreeEx 例程在客户端尝试将条目插入到已满的 lookaside 列表中时释放对 lookaside 列表条目的存储。

语法

FREE_FUNCTION_EX FreeFunctionEx;

void FreeFunctionEx(
  [in]      PVOID Buffer,
  [in, out] PLOOKASIDE_LIST_EX Lookaside
)
{...}

参数

[in] Buffer

指向要释放的 lookaside 列表条目的指针。

[in, out] Lookaside

指向描述外观列表的 LOOKASIDE_LIST_EX 结构的指针。 此结构以前由 ExInitializeLookasideListEx 例程初始化。

返回值

没有

言论

创建 lookaside 列表的驱动程序可以实现 LookasideListFreeEx 例程,以在列表已满且不包含更多缓冲区时释放以前分配的缓冲区。 未使用的缓冲区存储为列表中的条目。 外观列表中的所有条目都是统一大小的缓冲区,驱动程序在初始化列表时指定该缓冲区。

驱动程序提供指向自定义 LookasideListFreeEx 例程的指针,作为初始化 lookaside 列表的 ExInitializeLookasideListEx 调用中的输入参数。 如果驱动程序将此参数设置为 NULL,则 lookaside 列表将改用默认的解除分配例程。

驱动程序调用 ExFreeToLookasideListEx 例程,将以前分配的条目插入到 lookaside 列表中。 如果列表已满(即列表已包含系统确定的最大条目数),ExFreeToLookasideListEx 调用 LookasideListFreeEx 释放条目的存储。

LookasideListFreeEx 例程可以使用 lookaside 参数访问驱动程序与 lookaside 列表关联的专用上下文数据。 有关详细信息,请参阅 ExInitializeLookasideListEx中的代码示例。

有关外观列表的详细信息,请参阅 使用 Lookaside 列表

LookasideListFreeEx 例程与调用 ExFreeToLookasideListEx 释放条目的 IRQL 相同。 要使调用释放驻留在分页内存中的条目,调用方必须运行 IRQL <= APC_LEVEL。 要使调用释放驻留在非分页内存中的条目,调用方必须运行 IRQL <= DISPATCH_LEVEL。

例子

若要定义 LookasideListFreeEx 回调例程,必须先提供一个函数声明,用于标识要定义的回调例程的类型。 Windows 为驱动程序提供一组回调函数类型。 使用回调函数类型声明函数有助于 驱动程序代码分析静态驱动程序验证程序(SDV)和其他验证工具查找错误,这是为 Windows作系统编写驱动程序的要求。

例如,若要定义名为 MyLookasideListFreeExLookasideListFreeEx 回调例程,请使用FREE_FUNCTION_EX类型,如以下代码示例所示:

FREE_FUNCTION_EX MyLookasideListFreeEx;

然后,按如下所示实现回调例程:

_Use_decl_annotations_
VOID
  MyLookasideListFreeEx(
    PVOID  Buffer,
    PLOOKASIDE_LIST_EX  Lookaside
    )
  {
      // Function body
  }

FREE_FUNCTION_EX函数类型在 Wdm.h 头文件中定义。 若要在运行代码分析工具时更准确地识别错误,请务必将 _Use_decl_annotations_ 注释添加到函数定义。 _Use_decl_annotations_ 批注可确保使用应用于头文件中FREE_FUNCTION_EX函数类型的批注。 有关函数声明要求的详细信息,请参阅 使用 WDM 驱动程序的函数角色类型来声明函数。 有关 _Use_decl_annotations_的信息,请参阅 批注函数行为

要求

要求 价值
目标平台 桌面
标头 wdm.h (包括 Wdm.h、Ntddk.h、Ntifs.h)
IRQL 请参阅“备注”部分。

另请参阅

ExFreeToLookasideListEx

ExInitializeLookasideListEx

LOOKASIDE_LIST_EX