共用檔案和記憶體

檔案對應可用來在兩個或多個進程之間共用檔案或記憶體。 若要共用檔案或記憶體,所有進程都必須使用相同的檔案對應物件的名稱或控制碼。

若要共用檔案,第一個程式會使用 CreateFile 函式建立或開啟檔案。 接下來,它會使用 CreateFileMapping 函式 來建立檔案對應物件,並指定檔案對應物件的檔案控制碼和名稱。 事件、旗號、mutex、可等候的計時器、作業和檔案對應物件的名稱會共用相同的命名空間。 因此,如果 CreateFileMappingOpenFileMapping 函式指定另一種類型物件正在使用的名稱,則函式會失敗。

若要共用與檔案無關的記憶體,進程必須使用 CreateFileMapping 函式 ,並將INVALID_HANDLE_VALUE指定為 hFile 參數,而不是現有的檔案控制代碼。 對應的檔案對應物件會存取系統分頁檔案所支援的記憶體。 當您在CreateFileMapping呼叫中指定INVALID_HANDLE_VALUE 的 hFile時,必須指定大於零的大小。

若要讓其他進程取得第一個進程所建立之檔案對應物件的控制碼,最簡單的方式是使用 OpenFileMapping 函式 並指定物件的名稱。 這稱為 具名共用記憶體。 如果檔案對應物件沒有名稱,進程必須透過繼承或重複取得它的控制碼。 如需繼承和重複的詳細資訊,請參閱 繼承

共用檔案或記憶體的進程必須使用 MapViewOfFileMapViewOfFileEx 函式來建立檔案檢視。 他們必須使用旗號、mutex、事件或其他相互排除技術來協調其存取。 如需詳細資訊,請參閱 同步處理

使用 CloseHandle 函式關閉其控制碼的所有進程之前,將不會終結共用檔案對應物件。

如需檔案對應物件安全性的相關資訊,請參閱 檔案對應安全性和存取權限

建立具名共用記憶體