共用方式為


FREE_FUNCTION_EX回呼函式 (wdm.h)

當客戶端嘗試將專案插入完整清單時,LookasideListFreeEx 例程會釋放 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,以釋放專案的記憶體。

LookasideListFreeEx 例程可以使用 lookaside 參數來存取驅動程式與 lookaside 列表相關聯的私人內容數據。 如需詳細資訊,請參閱 ExInitializeLookasideListEx中的程式碼範例。

如需 lookaside 列表的詳細資訊,請參閱使用 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