讓驅動程式可分頁

根據預設,連結器會將 「.text」 和 「.data」 等名稱指派給驅動程式映射檔的程式碼和資料區段。 載入驅動程式時,I/O 管理員會將這些區段設為非分頁。 非分頁區段一律為記憶體駐留區段。

驅動程式開發人員可以選擇將驅動程式的指定元件設為可分頁,讓 Windows 可以在未使用時將這些元件移至分頁檔案。 若要讓程式碼或資料區段可分頁,驅動程式開發人員會將開頭為 「PAGE」 的名稱指派給區段。 I/O 管理員會在載入驅動程式時檢查區段的名稱。 如果區段名稱開頭為 「PAGE」,I/O 管理員會讓區段可分頁。

在 IRQL > = DISPATCH_LEVEL 執行的程式碼必須是記憶體駐留。 也就是說,此程式碼必須位於不可分頁區段中,或是在記憶體中鎖定的可分頁區段中。 如果在 IRQL > = DISPATCH_LEVEL執行的程式碼會造成分頁錯誤,就會發生錯誤檢查。 驅動程式可以使用 PAGED_CODE 宏來確認只能在適當的 IRCL 呼叫可分頁函式。

如果程式碼或資料區段可分頁,驅動程式可以呼叫 MmLockPagableCodeSection 或 MmLockPagableDataSection 常式來鎖定記憶體中的區 。 此區段會保持鎖定狀態,直到驅動程式呼叫 MmUnlockPagableImageSection 常式 來解除鎖定為止。 當可分頁區段鎖定時,其行為與非分頁區段相同。

如需如何將名稱指派給程式碼和資料區段的資訊,請參閱 MmLockPagableCodeSectionMmLockPagableDataSection

本節包含下列主題:

何時應該可分頁程式碼和資料?

讓驅動程式程式碼或資料可分頁