ntCreateSection 函式 (ntifs.h)

NtCreateSection 例程會建立區段物件**

語法

__kernel_entry NTSYSCALLAPI NTSTATUS NtCreateSection(
  [out]          PHANDLE            SectionHandle,
  [in]           ACCESS_MASK        DesiredAccess,
  [in, optional] POBJECT_ATTRIBUTES ObjectAttributes,
  [in, optional] PLARGE_INTEGER     MaximumSize,
  [in]           ULONG              SectionPageProtection,
  [in]           ULONG              AllocationAttributes,
  [in, optional] HANDLE             FileHandle
);

參數

[out] SectionHandle

HANDLE 變數的指標,該變數會接收區段物件的句柄。

[in] DesiredAccess

指定 ACCESS_MASK 值,決定對物件的要求存取。 除了針對所有類型的物件所定義的訪問許可權之外,呼叫者還可以指定下列任何一個訪問許可權,這些許可權是區段物件特有的:

DesiredAccess 旗標 允許呼叫端執行此動作
SECTION_EXTEND_SIZE 動態擴充區段的大小。
SECTION_MAP_EXECUTE 執行區段的檢視。
SECTION_MAP_READ 讀取區段的檢視。
SECTION_MAP_WRITE 寫入區段的檢視。
SECTION_QUERY 查詢區段物件以取得區段的相關信息。 驅動程式應該設定此旗標。
SECTION_ALL_ACCESS 與STANDARD_RIGHTS_REQUIRED結合的所有先前旗標。

[in, optional] ObjectAttributes

指定物件名稱和其他屬性 之OBJECT_ATTRIBUTES 結構的指標。 使用 InitializeObjectAttributes 初始化這個結構。 如果呼叫端未在系統線程內容中執行,它必須在呼叫 InitializeObjectAttributes 時設定OBJ_KERNEL_HANDLE屬性。

[in, optional] MaximumSize

指定區段的大小上限,以位元組為單位。 NtCreateSection 會將此值四捨五入到最接近的PAGE_SIZE倍數。 如果區段是由分頁檔案所支援, MaximumSize 會指定區段的實際大小。 如果區段是由一般檔案所支援, MaximumSize 會指定檔案可以擴充或對應的大小上限。

[in] SectionPageProtection

指定要在 區段中每個頁面上放置的保護。 使用下列四個值之一:PAGE_READONLY、PAGE_READWRITE、PAGE_EXECUTE或PAGE_WRITECOPY。 如需這些值的描述,請參閱 CreateFileMapping

[in] AllocationAttributes

指定SEC_XXX 旗標的位掩碼,以決定區段的配置屬性。 如需這些旗標的描述,請參閱 CreateFileMapping

[in, optional] FileHandle

選擇性地指定開啟檔案物件的句柄。 如果 FileHandle 的值是 NULL,區段會由分頁檔案支援。 否則,區段是由指定的檔案所支援。

傳回值

NtCreateSection 會在成功時傳回STATUS_SUCCESS,或在失敗時傳回適當的NTSTATUS錯誤碼。 可能的錯誤狀態代碼包括:

傳回碼 Description
STATUS_FILE_LOCK_CONFLICT FileHandle 參數指定的檔案已鎖定。
STATUS_INVALID_FILE_FOR_SECTION FileHandle 指定的檔案不支援區段。
STATUS_INVALID_PAGE_PROTECTION 為 SectionPageProtection 參數指定的值無效。
STATUS_MAPPED_FILE_SIZE_ZERO FileHandle 所指定的檔案大小為零,而 MaximumSize 為零。
STATUS_SECTION_TOO_BIG MaximumSize 的值太大。 當 MaximumSize 大於區段的系統定義最大值,或 MaximumSize 大於指定的檔案且區段不可寫入時,就會發生這種情況。

備註

一旦 SectionHandle 所指向的句柄不再使用,驅動程式必須呼叫 NtClose 以關閉它。

如果呼叫端未在系統線程內容中執行,則必須確保它建立的任何句柄都是私用句柄。 否則,進程可以在其內容中執行驅動程式的句柄來存取。 如需詳細資訊,請參閱 物件句柄

如需設定記憶體對應區段和檢視的詳細資訊,請參閱 區段和檢視

注意

如果在使用者模式中呼叫此函式,您應該使用名稱 「NtCreateSection」 而不是 「ZwCreateSection」。。

針對來自內核模式驅動程式的呼叫,Windows 原生系統服務例程的 NtXxxZwXxx 版本會以處理和解譯輸入參數的方式,以不同的方式運作。 如需 例程 NtXxxZwXxx 版本之間關聯性的詳細資訊,請參閱 使用原生系統服務例程的 Nt 和 Zw 版本

規格需求

需求
最低支援的用戶端 Windows 2000。
目標平台 Universal
標頭 ntifs.h (包含 Wdm.h、Ntifs.h)
程式庫 NtosKrnl.lib
Dll NtosKrnl.exe
IRQL PASSIVE_LEVEL

另請參閱

ACCESS_MASK

CreateFileMapping

InitializeObjectAttributes

ZwClose

ZwMapViewOfSection

ZwOpenSection

ZwUnmapViewOfSection