共用方式為


管理記憶體區段

驅動程式可以呼叫 ZwCreateSection 來建立區段物件,該區段對象會傳回區段物件的句柄。 使用 FileHandle 參數來指定支援檔案,如果區段不受檔案支援,則為 NULL 。 您可以使用 ZwOpenSection 開啟區段物件的其他句柄。

若要讓屬於區段對象的數據可在目前進程的位址空間記憶體取,則必須對應區段的檢視。 驅動程式可以使用 ZwMapViewOfSection 例程,將區段的檢視對應到目前進程的地址空間。 SectionOffset 參數指定檢視在區段內的字節偏移位置,而 ViewSize 則指定要映射的字節數。

Protect 參數會指定檢視上允許的作業。 若需唯讀檢視,請指定 PAGE_READONLY;若需讀寫檢視,請指定 PAGE_READWRITE;若需寫入時複製檢視,請指定 PAGE_WRITECOPY。

在存取虛擬記憶體範圍之前,不會為檢視配置任何物理記憶體。 記憶體範圍的第一次存取會導致頁面錯誤;然後,系統會配置頁面來保存該記憶體位置。 如果區段是以檔案為基礎的,系統會讀取對應至該頁面的檔案內容,並將它複製到記憶體中。 (請注意,未使用的區段對象和檢視會使用一些分頁和非分頁集區進行記帳。

在驅動程式不再使用檢視後,它會透過呼叫 ZwUnmapViewOfSection 來解除對應。 在驅動程式不再使用 section 物件之後,它會使用 ZwClose 關閉區段句柄。 請注意,在檢視對應且不會對應其他檢視之後,可以放心地在區段句柄上立即呼叫 ZwClose ;檢視 (和 section 物件) 會繼續存在,直到檢視未對應為止。 這是建議的做法,因為它可降低驅動程式無法關閉句柄的風險。