MapViewOfFileFromApp 函式 (memoryapi.h)

將檔案對應的檢視對應對應至呼叫 Windows 市集應用程式的地址空間。

語法

PVOID MapViewOfFileFromApp(
  [in] HANDLE  hFileMappingObject,
  [in] ULONG   DesiredAccess,
  [in] ULONG64 FileOffset,
  [in] SIZE_T  NumberOfBytesToMap
);

參數

[in] hFileMappingObject

檔案對應物件的句柄。 CreateFileMappingFromApp 函式會傳回此句柄。

[in] DesiredAccess

檔案對應物件的存取類型,決定頁面的頁面保護。 此參數可以是下列其中一個值,或適當情況下多個值的位 OR 組合。

意義
FILE_MAP_ALL_ACCESS
檔案的讀取/寫入檢視已對應。 檔案對應對象必須以 PAGE_READWRITE 保護建立。

搭配 MapViewOfFileFromApp 使用時, FILE_MAP_ALL_ACCESS 相當於 FILE_MAP_WRITE

FILE_MAP_READ
檔案的只讀檢視會對應。 嘗試寫入檔案檢視會導致存取違規。

檔案對應對象必須使用 PAGE_READONLYPAGE_READWRITEPAGE_EXECUTE_READPAGE_EXECUTE_READWRITE 保護來建立。

FILE_MAP_WRITE
檔案的讀取/寫入檢視已對應。 檔案對應對象必須以 PAGE_READWRITE 保護建立。

搭配 MapViewOfFileFromApp 使用時, (FILE_MAP_WRITE | FILE_MAP_READ) 相當於 FILE_MAP_WRITE

 

使用位 OR,您可以將上述值與這些值結合。

意義
FILE_MAP_COPY
檔案的複製寫入檢視會對應。 檔案對應對象必須使用PAGE_READONLY、PAGE_READ_EXECUTEPAGE_WRITECOPYPAGE_READWRITE保護來建立

當行程寫入至寫入時,系統會將原始頁面複製到程式私用的新頁面。 新頁面是由分頁檔案所支援。 新頁面的保護會從寫入複製變更為讀取/寫入。

指定複製寫入存取權時,系統與進程認可會針對整個檢視收費,因為呼叫進程可能會寫入檢視中的每個頁面,讓所有頁面成為私人頁面。 新頁面的內容永遠不會寫回源檔,而且在檢視未對應時遺失。

FILE_MAP_LARGE_PAGES
從 Windows 10 1703 版開始,此旗標會指定應該使用大型頁面支援來對應檢視。 檢視的大小必須是 GetLargePageMinimum 函式所報告之大型頁面大小的倍數,而且必須使用 [SEC_LARGE_PAGES] 選項建立檔案對應物件。 如果您為 lpBaseAddress 提供非 Null 值,則此值必須是 GetLargePageMinimum 的倍數。
FILE_MAP_TARGETS_INVALID
將對應檔案中的所有位置設定為控制流程防護 (CFG) 無效的目標。 此旗標類似於 PAGE_TARGETS_INVALID。 將此旗標與執行存取權搭配 使用FILE_MAP_EXECUTE。 對這些頁面中位置的任何間接呼叫都會失敗 CFG 檢查,而且程式將會終止。 配置之可執行文件頁面的預設行為是標示 CFG 的有效呼叫目標。
 

對於使用 SEC_IMAGE 屬性建立的檔案對應物件, dwDesiredAccess 參數沒有任何作用,而且應該設定為任何有效的值,例如 FILE_MAP_READ

如需檔案對應物件存取權的詳細資訊,請參閱 檔案對應安全性和訪問許可權

[in] FileOffset

要開始檢視的檔案位移。 位移必須在檔案對應內指定位移。 它們也必須符合系統的記憶體配置粒度。 也就是說,位移必須是配置粒度的倍數。 若要取得系統的記憶體配置粒度,請使用 GetSystemInfo 函式,以填入 SYSTEM_INFO 結構的成員。

[in] NumberOfBytesToMap

對應至檢視的檔案對應位元組數目。 所有位元組都必須在 CreateFileMappingFromApp 所指定的大小上限內。 如果此參數為 0 (零) ,則對應會從指定的位移延伸至檔案對應的結尾。

傳回值

如果函式成功,傳回值就是對應檢視的起始位址。

如果函式失敗,則傳回值為 NULL。 若要取得擴充的錯誤資訊,請呼叫 GetLastError

備註

有一個重要例外狀況,衍生自相同檔案所支援之任何檔案對應對象的檔案檢視在特定時間是一致或相同的。 對於進程內的檢視,以及由不同進程對應的檢視,保證一致性。

例外狀況與遠端檔案相關。 雖然 MapViewOfFileFromApp 可與遠端檔案搭配使用,但不會保持一致。 例如,如果兩部計算機將檔案對應為可寫入,而且兩部計算機都會變更相同的頁面,則每部計算機只會看到自己的頁面寫入。 當數據在磁碟上更新時,它不會合併。

如果您的應用程式具有 codeGeneration 功能,您只能成功要求可執行文件保護。

規格需求

需求
最低支援的用戶端 Windows 8 [傳統型應用程式 |UWP 應用程式]
最低支援的伺服器 Windows Server 2012 [傳統型應用程式 |UWP 應用程式]
目標平台 Windows
標頭 memoryapi.h (包括 Windows.h)
程式庫 onecore.lib
DLL Kernel32.dll

另請參閱

CreateFileMapping

建立檔案檢視

DuplicateHandle

GetSystemInfo

MapViewOfFile

MapViewOfFileEx

記憶體管理功能

OpenFileMapping

SYSTEM_INFO

UnmapViewOfFile