FREE_FUNCTION_EX回呼函式 (wdm.h)
當客戶端嘗試將專案插入已滿的 lookaside 清單中時, LookasideListFreeEx 例程會釋放 lookaside 列表專案的記憶體。
語法
FREE_FUNCTION_EX FreeFunctionEx;
void FreeFunctionEx(
[in] PVOID Buffer,
[in, out] PLOOKASIDE_LIST_EX Lookaside
)
{...}
參數
[in] Buffer
要釋放之 lookaside-list 專案的指標。
[in, out] Lookaside
描述外觀清單 之LOOKASIDE_LIST_EX 結構的指標。 這個結構先前是由 ExInitializeLookasideListEx 例程所初始化。
傳回值
無
備註
建立 Lookaside 列表的驅動程式可以實作 LookasideListFreeEx 例程,以在清單滿時釋放先前配置的緩衝區,而且不能包含更多緩衝區。 未使用的緩衝區會儲存為清單中的專案。 lookaside 清單中的所有專案都是統一大小的緩衝區,驅動程式會在清單初始化時指定。
驅動程式會提供自定義 LookasideListFreeEx 例程的指標,做為 ExInitializeLookasideListEx 呼叫中初始化 lookaside 列表的輸入參數。 如果驅動程式將此參數設定為 NULL,lookaside 列表會改用預設的解除分配例程。
驅動程式會呼叫 ExFreeToLookasideListEx 例程,將先前配置的專案插入 Lookaside 清單中。 如果清單已完整 (,如果清單已經包含系統決定的最大項目數 ) ,ExFreeToLookasideListEx 會呼叫 LookasideListFreeEx 來釋放專案的記憶體。
LookasideListFreeEx 例程可以使用 Lookaside 參數來存取驅動程式與 lookaside 列表相關聯的私人內容數據。 如需詳細資訊,請參閱 ExInitializeLookasideListEx 中的程式碼範例。
如需 lookaside 列表的詳細資訊,請參閱使用 Lookaside 清單。
LookasideListFreeEx 例程會呼叫與呼叫 ExFreeToLookasideListEx 的 IRQL 相同,以釋放專案。 若要讓呼叫釋放位於分頁記憶體中的專案,呼叫端必須執行 IRQL <= APC_LEVEL。 若要讓呼叫釋放位於非分頁記憶體中的專案,呼叫端必須執行 IRQL <= DISPATCH_LEVEL。
範例
若要定義 LookasideListFreeEx 回呼例程,您必須先提供函式宣告來識別您要定義的回呼例程類型。 Windows 提供一組驅動程式的回呼函式類型。 使用回呼函式類型宣告函式有助於 驅動程式的程式代碼分析、 靜態驅動程式驗證器 (SDV) ,以及其他驗證工具會尋找錯誤,而且這是撰寫 Windows 操作系統驅動程式的需求。
例如,若要定義名為 MyLookasideListFreeEx
的 LookasideListFreeEx 回呼例程,請使用 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 | 請參閱一節。 |