核心物件
核心物件控制碼是特定的進程。 也就是說,進程必須建立 物件或開啟現有的 物件,以取得核心物件控制碼。 核心控制碼上的每個進程限制為 2^24。 不過,控制碼會儲存在分頁集區中,因此您可以建立的實際控制碼數目是以可用的記憶體為基礎。 您可以在 32 位Windows上建立的控制碼數目明顯低於 2^24。
任何進程都可以建立現有核心物件的新控制碼, (由另一個進程所建立) ,前提是進程知道物件的名稱,並且具有物件的安全性存取權。 核心物件控制碼包含存取權限,指出可以授與或拒絕進程的動作。 應用程式會在建立物件或取得現有的物件控制碼時指定存取權限。 每種核心物件類型都支援自己的一組存取權限。 例如,事件控制碼可以設定或等候存取 (或兩者) 、檔案控制代碼可以有讀取或寫入權限 (或兩者) 等等。 如需詳細資訊,請參閱 安全性實體物件。
在下圖中,應用程式會建立事件物件。 CreateEvent函式會建立事件物件,並傳回物件控制碼。

建立事件物件之後,應用程式可以使用事件控制碼來設定或等候事件。 控制碼會維持有效狀態,直到應用程式關閉控制碼或終止為止。
大部分的核心物件都支援單一物件的多個控制碼。 例如,上圖中的應用程式可以使用 OpenEvent 函式取得其他事件物件控制碼,如下圖所示。

此方法可讓應用程式擁有具有不同存取權限的控制碼。 例如,Handle 1 可能已設定並等候事件存取權,而 Handle 2 可能只有等候存取權。
如果另一個進程知道事件名稱,而且具有物件的安全性存取權,則可以使用 OpenEvent建立自己的事件物件控制碼。 建立應用程式也可以使用 DuplicateHandle 函式,將其其中一個控制碼複製到相同的進程或另一個進程。
只要至少有一個物件控制碼存在,物件就會保留在記憶體中。 在下圖中,應用程式會使用 CloseHandle 函式來關閉其事件物件控制碼。 當沒有任何事件控制碼時,系統會從記憶體中移除物件,如下圖所示。

系統管理檔案物件的方式與其他核心物件稍有不同。 檔案物件包含檔案指標 — 要讀取或寫入檔案中下一個位元組的指標。 每當應用程式建立新的檔案控制代碼時,系統就會建立新的檔案物件。 因此,多個檔案物件可以參照磁片上的單一檔案,如下圖所示。

只有透過重複或繼承可以有多個檔案控制碼參照相同的檔案物件,如下圖所示。

下表列出每個核心物件,以及每個物件的建立者和終端子函式。 建立者函式會建立物件和物件控制碼,或建立新的現有物件控制碼。 終端子函式會關閉物件控制碼。 當應用程式關閉核心物件的最後一個控制碼時,系統會從記憶體中移除物件。
相關主題