ZwMapViewOfSection 函式 (wdm.h)
ZwMapViewOfSection 例程會將區段的檢視對應至主旨程式的虛擬位址空間。
語法
NTSYSAPI NTSTATUS ZwMapViewOfSection(
[in] HANDLE SectionHandle,
[in] HANDLE ProcessHandle,
[in, out] PVOID *BaseAddress,
[in] ULONG_PTR ZeroBits,
[in] SIZE_T CommitSize,
[in, out, optional] PLARGE_INTEGER SectionOffset,
[in, out] PSIZE_T ViewSize,
[in] SECTION_INHERIT InheritDisposition,
[in] ULONG AllocationType,
[in] ULONG Win32Protect
);
參數
[in] SectionHandle
區段物件的句柄。 此句柄是由成功呼叫 ZwCreateSection 或 ZwOpenSection 所建立。
[in] ProcessHandle
物件句柄,表示檢視應該對應至的進程。 使用 ZwCurrentProcess 宏來指定目前的進程。 句柄必須以 PROCESS_VM_OPERATION 存取權開啟。
[in, out] BaseAddress
接收檢視基位址之變數的指標。 如果此參數的值不是 NULL,則檢視會從指定的虛擬位址四捨五入到下一個 64 KB 位址界限開始配置。
[in] ZeroBits
指定區段檢視基地址中必須為零的高序位址位數目。 此參數的值必須小於 21,而且只有在 BaseAddress 為 NULL 時才使用,換句話說,當呼叫端允許系統判斷要配置檢視的位置時。
[in] CommitSize
指定檢視最初認可區域的大小,以位元組為單位。 CommitSize 僅適用於頁面檔支援的區段,而且會四捨五入至最接近的PAGE_SIZE倍數。 (針對對應檔案的區段,數據與影像都會在區段建立時間認可。)
[in, out, optional] SectionOffset
從區段開頭到檢視接收位移的變數指標,以位元組為單位。 如果這個指標不是 NULL,則位移會四捨五入到下一個配置粒度大小界限。
[in, out] ViewSize
SIZE_T變數的指標。 如果此變數的初始值為零, ZwMapViewOfSection 會對應從 SectionOffset 開始的區段檢視,並繼續到區段結尾。 否則,初始值會以位元組為單位指定檢視的大小。 在對應檢視之前,ZwMapViewOfSection 一律會將此值四捨五入至最接近的PAGE_SIZE倍數。
傳回時,值會接收檢視的實際大小,以位元組為單位。
[in] InheritDisposition
指定如何與子進程共享檢視。 可能的值包括:
ViewShare
檢視會對應到未來建立的任何子進程。
ViewUnmap
檢視不會對應至子進程。
驅動程式通常應該指定此參數的 ViewUnmap 。
[in] AllocationType
指定一組旗標,描述要針對指定頁面區域執行的配置類型。 有效的旗標是MEM_LARGE_PAGES、MEM_RESERVE和MEM_TOP_DOWN。 雖然不允許MEM_COMMIT,除非指定MEM_RESERVE,否則會隱含它。 如需有關 MEM_XXX 旗標的詳細資訊,請參閱 VirtualAlloc 例程的描述。
[in] Win32Protect
指定初始認可頁面區域的保護類型。 裝置和中繼驅動程序應該將此值設定為PAGE_READWRITE。
傳回值
ZwMapViewOfSection 會傳回 NTSTATUS 值。 可能的傳回值包括下列各項:
傳回碼 | Description |
---|---|
STATUS_SUCCESS | 例程已成功執行要求的作業。 |
STATUS_CONFLICTING_ADDRESSES | 指定的位址範圍與已保留的位址範圍衝突,或指定的快取屬性類型與位址範圍的現有快取屬性衝突。 例如,如果所對應的記憶體位於已經對應為完整快取的大型頁面中,則要求將此記憶體對應為非快取或合併寫入是不合法的。 |
STATUS_INVALID_PAGE_PROTECTION | 為 Protect 參數指定的值無效。 |
STATUS_SECTION_PROTECTION | 針對 AllocationType 參數指定的值與建立區段時指定的保護類型不相容。 |
備註
區段的數個不同檢視可以同時對應至一或多個進程的虛擬位址空間。
如果指定的區段不存在或不允許要求的存取權, ZwMapViewOfSection 會傳回錯誤。
請勿使用 ZwMapViewOfSection 將記憶體範圍從 \Device\PhysicalMemory 對應到使用者模式,除非您的驅動程式已透過 MmAllocatePagesForMdl 或其他方法直接配置記憶體範圍,否則保證沒有其他系統元件將相同的記憶體範圍對應至不同的 MEMORY_CACHING_TYPE 值。
使用者應用程式無法直接從 Windows Server 2003 Service Pack 1 (SP1 存取 \Device\PhysicalMemory) ,而且只有在驅動程式將句柄傳遞至應用程式時,才能存取它。
如需區段對象的詳細資訊,請參閱 區段對象和檢視。
如果呼叫此函式發生在使用者模式中,您應該使用名稱 「NtMapViewOfSection」 而不是 「ZwMapViewOfSection」。。
對於核心模式驅動程式的呼叫,Windows 原生系統服務例程的 NtXxx 和 ZwXxx 版本在處理和解譯輸入參數的方式可能會有不同的行為。 如需例程 NtXxx 和 ZwXxx 版本之間的關聯性詳細資訊,請參閱 使用 Nt 和 Zw 版本的原生系統服務例程。
規格需求
需求 | 值 |
---|---|
目標平台 | Universal |
標頭 | wdm.h (包括 Wdm.h、Ntddk.h、Ntifs.h) |
程式庫 | NtosKrnl.lib |
Dll | NtosKrnl.exe |
IRQL | PASSIVE_LEVEL |
DDI 合規性規則 | HwStorPortProhibitedDDIs (storport) 、 PowerIrpDDis (wdm) |
另請參閱
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應