管理記憶體區段
驅動程式可以呼叫 ZwCreateSection來建立區段物件,這會傳回區段物件的控制碼。 使用 FileHandle 參數來指定支援檔案,如果區段未支援檔案,則為 Null 。 您可以使用 ZwOpenSection開啟區段物件的其他控制碼。
若要讓屬於目前進程位址空間內可存取區段物件的資料,必須對應區段的檢視。 驅動程式可以使用 ZwMapViewOfSection 常式,將區段的檢視對應至目前進程的位址空間。 SectionOffset參數會指定要在區段內開始檢視的位元組位移,而ViewSize會指定要對應的位元組數目。
Protect參數會指定檢視上允許的作業。 針對唯讀檢視指定PAGE_READONLY、讀取/寫入檢視PAGE_READWRITE,以及針對寫入時複製檢視指定PAGE_WRITECOPY。
在存取虛擬記憶體範圍之前,不會為檢視配置任何實體記憶體。 記憶體範圍的第一次存取會導致分頁錯誤;系統接著會配置頁面來保存該記憶體位置。 如果區段是檔案支援,系統會讀取對應至該頁面的檔案內容,並將它複製到記憶體中。 (請注意,未使用的區段物件和檢視會使用一些分頁和非分頁集區來進行記事記錄。)
驅動程式不再使用檢視之後,它會呼叫 ZwUnmapViewOfSection來取消對應。 驅動程式不再使用 section 物件之後,它會使用 ZwClose關閉區段控制碼。 請注意,在檢視對應且不會對應其他檢視之後,安全地在區段控制碼上立即呼叫 ZwClose ;檢視 (和區段物件) 會繼續存在,直到檢視未對應為止。 這是建議的做法,因為它可降低驅動程式無法關閉控制碼的風險。