共用方式為


核心物件

核心物件句柄是進程特定的。 也就是說,進程必須建立 對象或開啟現有的物件,以取得核心物件句柄。 核心句柄上的每個進程限制為 2^24。 不過,句柄會儲存在分頁集區中,因此您可以建立的實際句柄數目是以可用的記憶體為基礎。 您可以在 32 位 Windows 上建立的句柄數目明顯低於 2^24。

任何進程都可以建立現有核心物件的新句柄(甚至是由另一個進程建立的句柄),前提是進程知道對象的名稱,而且具有物件的安全性存取權。 核心物件句柄包含訪問許可權,指出可授與或拒絕處理程序的動作。 應用程式會在建立物件或取得現有的物件句柄時指定訪問許可權。 每種核心物件類型都支援自己的一組訪問許可權。 例如,事件句柄可以有設定或等候存取權(或兩者),檔案句柄可以有讀取或寫入存取權(或兩者皆有),依此而行。 如需詳細資訊,請參閱 安全性實體物件

在下圖中,應用程式會建立事件物件。 CreateEvent 函式會建立事件物件,並傳回物件句柄。

應用程式建立事件物件

建立事件物件之後,應用程式可以使用事件句柄來設定或等候事件。 句柄會維持有效狀態,直到應用程式關閉句柄或終止為止。

大部分的核心物件都支援單一物件的多個句柄。 例如,上圖中的應用程式可以使用 OpenEvent 函式來取得其他事件物件句柄,如下圖所示。

應用程式建立具有多個句柄的事件物件

此方法可讓應用程式具有不同訪問許可權的句柄。 例如,Handle 1 可能已設定並等候事件存取權,而 Handle 2 可能只有等候存取權。

如果另一個進程知道事件名稱且具有物件的安全性存取權,則可以使用 OpenEvent建立自己的事件物件句柄。 建立應用程式也可以使用 DuplicateHandle 函式,將其中一個句柄複製到相同的進程或另一個進程。

只要至少有一個物件句柄存在,物件就會保留在記憶體中。 在下圖中,應用程式會使用 CloseHandle 函式來關閉其事件物件句柄。 當沒有任何事件句柄時,系統會從記憶體中移除物件,如下圖所示。

應用程式關閉事件物件句柄,以從記憶體中移除物件

系統管理檔案物件與其他核心物件有些不同。 檔案物件包含檔案指標 - 要讀取或寫入檔案中下一個字節的指標。 每當應用程式建立新的檔句柄時,系統就會建立新的檔案物件。 因此,多個檔案對象可以參考磁碟上的單一檔案,如下圖所示。

多個參考磁碟上檔案的檔案物件

只有透過重複或繼承,才能有一個以上的檔句柄參照相同的檔案物件,如下圖所示。

兩個檔句柄參考相同的檔案物件

下表列出每個核心物件,以及每個物件的建立者和終結器函式。 建立者函式會建立對象和物件句柄,或建立新的現有物件句柄。 終結器函式會關閉物件句柄。 當應用程式關閉最後一個核心物件的句柄時,系統會從記憶體中移除物件。

Kernel 物件 Creator 函式 終結器函式
存取令牌 CreateRestrictedTokenDuplicateTokenDuplicateTokenExOpenProcessTokenOpenThreadToken CloseHandle
變更通知 FindFirstChangeNotification FindCloseChangeNotification
通訊裝置 CreateFile CloseHandle
主控台輸入 使用 CONIN$ CreateFile CloseHandle
控制台畫面緩衝區 使用 CONOUT$ CreateFile CloseHandle
桌面 GetThreadDesktop 應用程式無法刪除此物件。
事件 CreateEventCreateEventExOpenEvent CloseHandle
事件記錄檔 OpenEventLogRegisterEventSourceOpenBackupEventLog CloseEventLog
CreateFile CloseHandleDeleteFile
檔案對應 CreateFileMappingOpenFileMapping CloseHandle
尋找檔案 FindFirstFile FindClose
堆積建立 堆積
I/O 完成埠 CreateIoCompletionPort CloseHandle
工作 CreateJobObject CloseHandle
Mailslot CreateMailslot CloseHandle
記憶體資源通知 CreateMemoryResourceNotification CloseHandle
模組 LoadLibraryGetModuleHandle FreeLibrary
Mutex CreateMutexCreateMutexExOpenMutex CloseHandle
CreateNamedPipeCreatePipe CloseHandleDisconnectNamedPipe
過程 CreateProcessOpenProcessGetCurrentProcess CloseHandleTerminateProcess
信號 CreateSemaphoreCreateSemaphoreExOpenSemaphore CloseHandle
插座 套接字接受 closesocket
CreateThreadCreateRemoteThreadGetCurrentThread CloseHandleTerminateThread
定時器 CreateWaitableTimerCreateWaitableTimerExOpenWaitableTimer CloseHandle
更新資源 BeginUpdateResource EndUpdateResource
視窗月臺 GetProcessWindowStation 應用程式無法刪除此物件。

 

核心物件命名空間