共用方式為


通訊協定驅動程式中的可分頁和可捨棄的程式碼

驅動程式開發人員應該盡可能將程式碼指定為可分頁,為必須駐留記憶體的程式碼釋放系統空間。 您可以使用 NDIS_PAGEABLE_FUNCTION 宏將函式標示為可分頁。 IRQL、資源管理功能和其他函式特性可能會禁止函式可分頁。

每個 ProtocolXxx 函式都會在範圍從 PASSIVE_LEVEL 到 DISPATCH_LEVEL 的 IRQL 上執行。 在 IRQL = PASSIVE_LEVEL執行的函式應該標示為可分頁。

在 IRQL = PASSIVE_LEVEL執行的驅動程式函式,只要在 IRQL > = DISPATCH_LEVEL執行的任何函式都無法呼叫或呼叫,例如取得微調鎖定的函式即可進行分頁。 取得微調鎖定會導致取得執行緒的 IRQL 引發至DISPATCH_LEVEL。 在 IRQL = PASSIVE_LEVEL執行的 Driver 函式,例如ProtocolBindAdapterEx,如果該驅動程式函式標示為可分頁程式碼,則無法在 IRQL = DISPATCH_LEVEL呼叫任何在 IRQL > 上執行的NdisXxx函式。 如需每個NdisXxx函式 IRQL 的詳細資訊,請參閱NDIS 程式庫函式

NDIS 通訊協定驅動程式的 DriverEntry 函式,以及只從 DriverEntry呼叫的程式碼,應該使用 NDIS_INIT_FUNCTION 宏指定為僅限初始化的程式碼。 使用此宏識別的程式碼假設只在系統初始化時間執行一次,因此只會在該時間進行對應。 在標示為僅限初始化的函式傳回之後,會捨棄它。