FsRtlCreateSectionForDataScan 函式 (ntifs.h)

FsRtlCreateSectionForDataScan 例程會建立區段物件。 請特別小心使用此例程。 (請參閱下列一節。)

語法

NTSTATUS FsRtlCreateSectionForDataScan(
  [out]           PHANDLE            SectionHandle,
  [out]           PVOID              *SectionObject,
  [out, optional] PLARGE_INTEGER     SectionFileSize,
  [in]            PFILE_OBJECT       FileObject,
  [in]            ACCESS_MASK        DesiredAccess,
  [in, optional]  POBJECT_ATTRIBUTES ObjectAttributes,
  [in, optional]  PLARGE_INTEGER     MaximumSize,
  [in]            ULONG              SectionPageProtection,
  [in]            ULONG              AllocationAttributes,
  [in]            ULONG              Flags
);

參數

[out] SectionHandle

呼叫端配置的變數指標,該變數會接收區段物件的不透明句柄。

[out] SectionObject

呼叫端配置的變數指標,該變數會接收區段物件的不透明指標。

[out, optional] SectionFileSize

呼叫端配置的變數指標,該變數會在建立區段物件時接收檔案的大小,以位元組為單位。 此參數是選擇性的,可以是 NULL

[in] FileObject

開啟檔案的 File 物件。 區段物件將由指定的檔案支援。 這個參數是必要的,而且不能是 NULL

[in] DesiredAccess

指定區段物件所需的存取權,做為下列一或多個 ACCESS_MASK 旗標。

DesiredAccess 旗標 允許呼叫端
SECTION_MAP_READ 讀取區段的檢視。
SECTION_MAP_WRITE 撰寫區段的檢視。
SECTION_QUERY 查詢區段物件以取得區段的相關信息。 驅動程式應設定此旗標。
SECTION_ALL_ACCESS 先前旗標所定義的所有動作,以及由STANDARD_RIGHTS_REQUIRED所定義的動作。 (如需STANDARD_RIGHTS_REQUIRED的詳細資訊,請參閱 ACCESS_MASK.)

[in, optional] ObjectAttributes

指定物件名稱和其他屬性之 OBJECT_ATTRIBUTES 結構的指標。 使用 InitializeObjectAttributes 宏來初始化這個結構。 因為 FsRtlCreateSectionForDataScan 會將這個物件插入進程句柄數據表中,所以呼叫端必須在呼叫 InitializeObjectAttributes 時指定OBJ_KERNEL_HANDLE屬性。

[in, optional] MaximumSize

這個參數保留給未來使用。

[in] SectionPageProtection

指定要放在 區段中每個頁面的保護。 指定下列其中一個值。 這個參數是必要的,而且不能是零。

旗標 意義
PAGE_READONLY 啟用頁面認可區域的唯讀存取。 嘗試寫入已認可的區域會導致存取違規。 如果系統區分只讀存取和執行存取權,則嘗試在認可的區域中執行程式代碼會導致存取違規。
PAGE_READWRITE 啟用對已認可頁面區域的讀取和寫入存取。

[in] AllocationAttributes

SEC_XXX 旗標的位掩碼會決定區段的配置屬性。 指定下列一或多個值。 這個參數是必要的,而且不能是零。

旗標 意義
SEC_COMMIT 針對區段的所有頁面,在記憶體或磁碟上的分頁檔案中配置實體記憶體。 這是預設值。 請注意,此旗標是必要的,因此無法省略。
SEC_FILE FileObject 參數指定的檔案是對應的檔案。

[in] Flags

這個參數保留給未來使用。

傳回值

FsRtlCreateSectionForDataScan 會傳回STATUS_SUCCESS或適當的 NTSTATUS 值,例如下列其中一項:

傳回碼 Description
STATUS_END_OF_FILE
FileObject 參數所指定的檔案大小為零。 這是錯誤碼。
STATUS_FILE_LOCK_CONFLICT
FileObject 參數指定的檔案已鎖定。 這是錯誤碼。
STATUS_INSUFFICIENT_RESOURCES
FsRtlCreateSectionForDataScan 發生集區配置失敗。 這是錯誤碼。
STATUS_INVALID_FILE_FOR_SECTION
FileObject 參數指定的檔案不支援區段。 這是錯誤碼。
STATUS_INVALID_PARAMETER_8
針對 SectionPageProtection 參數指定的值無效。 這是錯誤碼。
STATUS_INVALID_PARAMETER_9
呼叫端為 AllocationAttributes 參數指定了無效的值。 這是錯誤碼。
STATUS_PRIVILEGE_NOT_HELD

呼叫端沒有建立具有 DesiredAccess 參數中所指定存取權的區段物件所需的許可權。 這是錯誤碼。

備註

重要FsRtlCreateSectionForDataScan 例程只有在 FileObject 參數中指定的檔案物件的句柄尚未建立的情況下使用,通常 (處理建立後作業時) 。 如果驅動程式具有檔案物件的句柄,或可以取得檔案物件的句柄,驅動程式應該改用 ZwCreateSection 例程。
 
一旦不再需要這個例程所建立的 section 物件,請務必藉由呼叫 ZwClose 例程來關閉 section 物件的句柄 (SectionHandle) ,並藉由呼叫 ObDereferenceObject 例程來取值區段物件本身 (SectionObject) 。

如需建立記憶體對應區段和檢視的詳細資訊,請參閱 一節。 另請參閱 Microsoft Windows SDK 中的 CreateFileMapping 例程檔。

規格需求

需求
最低支援的用戶端 Windows 2000 Service Pack 4 的更新匯總 (SP4) ;Windows XP Service Pack 2 的篩選管理員匯總 (SP2) 。
最低支援的伺服器 Microsoft Windows Server 2003 SP1
目標平台 Universal
標頭 ntifs.h (包含 Ntifs.h)
程式庫 NtosKrnl.lib
Dll NtosKrnl.exe
IRQL <= APC_LEVEL

另請參閱

ACCESS_MASK

CcPurgeCacheSection

mmFlushImagesection

MmForceSectionClosed

ZwCreateSection