3 核心對象
3.1
哪些是Windows的核心對象
比如:令牌對象,事件對象,檔案對象,目錄對象,檔案對應物件,IO完成連接埠,互斥量,線程對象,進程對象,作業,管道,等等。
核心對象有作業系統管理,返回HANDLE 它是指標,指向一個由作業系統管理的核心對象表.
3.1.1 使用計數
作業系統知道核心對象的使用計數,當計數為0,由作業系統負責銷毀核心對象.
3.1.2 核心對象的安全性
SECURITY_ATTRIBUTES 結構體來描述
3.2 進程核心物件控點表
3.2.1 建立核心對象
建立一個核心對象,它是與進程相關的,就是說只能在建立的那個進程使用,其他進程不知道這個核心對象.
3.2.2 關閉核心對象
Closehandle 函數來關閉核心對象. 不關閉核心對象,會造成資源流失。但是進程退出時,進程的所有資源都被作業系統收回。
3.3 跨進程邊界共用核心對象
有三種不同的機制來允許進程共用核心對象:
1 使用物件控點繼承
2 為對象命名
3 複製對象
3.3.1 使用物件控點繼承
只有進程之間有父子關係時才可以使用物件控點繼承。
安全描述的結構體需要把繼承的標誌位置為true
然後通過CreateProcess完成
3.3.2 改變控制代碼的標誌
SetHandleInformation來改變核心對象的繼承控制代碼
GetHandleInformation來得到核心對象的是否繼承
3.3.3 為核心對象命名
HANDLE CreateMutex(
PSECURITY_ATTRIBUTES psa,
BOOL bInitialOwner,
PCTSTR pszName);
最後一個接收“以0為終止符的字串”所以的核心對象都使用一個名字空間,如果重名的話,核心對象建立失敗.
如果有一個同名的核心對象,那麼CreateXX函數返回 ERROR_INVALID_HANDLE
getlastError 返回ERROR_ALREADY_EXISTS 表示存在.
可以使用OpenXX來開啟一個核心對象