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