Share via


何時應該可分頁程式代碼和數據?

您可以讓所有或部分的驅動程式可分頁。 分頁驅動程式程式代碼可以減少驅動程式的載入映像大小,因而釋放系統空間以供其他用途使用。 對於偶爾使用的裝置驅動程式而言最實用,例如數據機和CD-ROM,或很少呼叫的驅動程式部分。

執行下列任一動作的驅動程式程式代碼必須是記憶體駐留。 也就是說,此程式代碼必須在非分頁區段中,或在程式代碼執行時鎖定在記憶體中的分頁區段中。

  • 在 IRQL = DISPATCH_LEVEL執行。

  • 取得微調鎖定。

  • 呼叫任何核心的物件支援例程,例如 KeReleaseMutexKeReleaseSemaphore其中 Wait 參數會設定為 TRUE。 如果使用 Wait 設定為 TRUE 呼叫核心,則呼叫會在 DISPATCH_LEVEL傳回 IRQL。

當程式代碼執行任何可能造成頁面錯誤的動作時,驅動程式程式代碼必須在 IRQL < 執行DISPATCH_LEVEL。 如果程式代碼執行下列任一項動作,可能會造成頁面錯誤:

  • 存取記憶體中未鎖定的分頁集區。

  • 呼叫可分頁的例程。

  • 存取使用者線程內容中已解除鎖定的用戶緩衝區。

一般而言,如果所有可分頁程式代碼的總數量 (或數據) 至少為 4 KB (KB) ,您應該進行分頁。 盡可能隔離純可分頁的程式代碼 (或數據) 區段與程式代碼 (或數據) 有時可以分頁但有時必須鎖定的數據) 。 例如,結合純可分頁程式代碼和鎖定隨選程序代碼,會導致合併區段的系統空間比必要還要多。 不過,如果驅動程式的可分頁程式代碼 (或資料) 少於 4 KB,您可以將該程式代碼 (或資料) 與鎖定隨選程式代碼 (或資料) 合併成一個區段,以節省系統空間。