核心物件
核心物件句柄是進程特定的。 也就是說,進程必須建立 對象或開啟現有的物件,以取得核心物件句柄。 核心句柄上的每個進程限制為 2^24。 不過,句柄會儲存在分頁集區中,因此您可以建立的實際句柄數目是以可用的記憶體為基礎。 您可以在 32 位 Windows 上建立的句柄數目明顯低於 2^24。
任何進程都可以建立現有核心物件的新句柄(甚至是由另一個進程建立的句柄),前提是進程知道對象的名稱,而且具有物件的安全性存取權。 核心物件句柄包含訪問許可權,指出可授與或拒絕處理程序的動作。 應用程式會在建立物件或取得現有的物件句柄時指定訪問許可權。 每種核心物件類型都支援自己的一組訪問許可權。 例如,事件句柄可以有設定或等候存取權(或兩者),檔案句柄可以有讀取或寫入存取權(或兩者皆有),依此而行。 如需詳細資訊,請參閱 安全性實體物件。
在下圖中,應用程式會建立事件物件。 CreateEvent 函式會建立事件物件,並傳回物件句柄。
建立事件物件之後,應用程式可以使用事件句柄來設定或等候事件。 句柄會維持有效狀態,直到應用程式關閉句柄或終止為止。
大部分的核心物件都支援單一物件的多個句柄。 例如,上圖中的應用程式可以使用 OpenEvent 函式來取得其他事件物件句柄,如下圖所示。
此方法可讓應用程式具有不同訪問許可權的句柄。 例如,Handle 1 可能已設定並等候事件存取權,而 Handle 2 可能只有等候存取權。
如果另一個進程知道事件名稱且具有物件的安全性存取權,則可以使用 OpenEvent建立自己的事件物件句柄。 建立應用程式也可以使用 DuplicateHandle 函式,將其中一個句柄複製到相同的進程或另一個進程。
只要至少有一個物件句柄存在,物件就會保留在記憶體中。 在下圖中,應用程式會使用 CloseHandle 函式來關閉其事件物件句柄。 當沒有任何事件句柄時,系統會從記憶體中移除物件,如下圖所示。
系統管理檔案物件與其他核心物件有些不同。 檔案物件包含檔案指標 - 要讀取或寫入檔案中下一個字節的指標。 每當應用程式建立新的檔句柄時,系統就會建立新的檔案物件。 因此,多個檔案對象可以參考磁碟上的單一檔案,如下圖所示。
只有透過重複或繼承,才能有一個以上的檔句柄參照相同的檔案物件,如下圖所示。
下表列出每個核心物件,以及每個物件的建立者和終結器函式。 建立者函式會建立對象和物件句柄,或建立新的現有物件句柄。 終結器函式會關閉物件句柄。 當應用程式關閉最後一個核心物件的句柄時,系統會從記憶體中移除物件。
相關主題