單地說:
核心物件是系統的一種資源。系統物件一旦產生,任何應用程式都可以開啟並且使用該物件。系統給核心物件乙個計數值作為管理只用,核心物件包括:
這些核心物件每次產生都會返回乙個handle,作為標示,每使用一次,對應的計數值加1,呼叫closehandle可以結束核心物件的使用。
具體:1. 核心物件:
1).符號物件
2).事件物件
3).檔案物件
4).檔案影象物件
5).i/o完成物件
6).作業物件
7).信箱物件
8).互斥物件
9).管道物件
10).程序物件
11).信標物件
12).執行緒物件
13).待計時器物件
等2.核心物件只能由核心所擁有,而不是由程序擁有.(就是說程序沒有了,核心還可以被其他程序使用)
3.核心物件的資料結構有計數器,程序呼叫時,計數器增1,呼叫結束,計數器減1,核心物件計數器為零時,銷毀此核心物件.(系統來管理核心物件)
4.核心安全性,程序使用什麼許可權呼叫核心物件,由security_attributes結構的資料結構來指定.幾乎所有的呼叫核心物件的函式都含有security_attributes結構的指標引數.(可以由這個引數來判斷是不是核心物件哦)
typedef struct _security_attributes security_attributes, *psecurity_attributes;
5.程序的核心物件的控制代碼表,程序呼叫核心物件時,就會建立核心物件的控制代碼表,就是核心物件在程序中的索引,索引值就是呼叫核心物件函式返回的控制代碼.關閉所有的核心物件,使用closehandle();
6.跨越程序邊界共享核心物件
microsoft把控制代碼設計成程序控制代碼,不設計成系統控制代碼是為了實現控制代碼的健壯性和安全性。
1)核心物件控制代碼的繼承性。(為了實現核心的多個程序的共享)
作用:為了子程序實現對父程序建立的核心物件的訪問。
步驟:首先,父程序建立核心物件時,初始化security_attributes結構的物件,讓security_attributes結構體的成員變數binherithandle設定為true。
然後,子程序建立後,生成自己的控制代碼表,控制代碼表遍歷父程序的控制代碼表,找到有繼承性的控制代碼,並複製乙份到子程序的控制代碼表中,子程序的核心物件和父程序的核心物件使用相同的記憶體塊指標,核心物件計數器在子程序中建立核心物件後增一,父程序呼叫closehandle()來關閉核心物件,確不影響子程序使用該核心物件。
2)改變控制代碼的標誌
bool sethandleinformation(
handle hobject, // handle to object
dword dwmask, // flags to change
dword dwflags // new values for flags
);開啟核心的可繼承性標誌
sethandleinformation(hobj,handle_flag_inherit,handle_flag_inherit);
關閉核心的可繼承性標誌
sethandleinformation(hobj,handle_flag_inherit,0);
若想讓核心物件不被關閉,設定handle_flag_protect_from_close。
獲得控制代碼標誌的函式
bool gethandleinformation(
handle hobject, // handle to object
lpdword lpdwflags // handle properties
);3)命名物件
作用:讓程序中的核心物件可以共享,讓別的程序可以通過命名空間,跨程序來訪問這個程序的核心物件。
建立物件和訪問物件使用函式
建立物件create*:如果命名的核心物件已經存在並具備安全訪問許可權,則引數被忽略,程序的控制代碼表複製乙份核心物件的指標和標誌到程序的控制代碼表,如果不存在,則馬上建立核心物件。
例子:handle createmutex(
lpsecurity_attributes lpmutexattributes, // sd
bool binitialowner, // initial owner
lpctstr lpname // 物件名字
);開啟物件open*:如果命名的核心物件已經存在並具備安全訪問許可權,程序的控制代碼表複製乙份核心物件的指標和標誌到程序的控制代碼表,如果不存在,則返回null,使用getlasserror(),得到返回值2。
4)終端服務的名字空間
每個客戶程式會話都有自己的服務名字空間,乙個會話無法訪問另乙個會話的物件,儘管他們具備相同的物件名字。
服務程式的名字空間物件總放在全域性名字空間中。
5)複製物件控制代碼
duplicatehandle函式來對另乙個程序物件的控制代碼進行複製到呼叫此函式的程序控制代碼表中,實現程序間共享核心物件。
bool duplicatehandle(
handle hsourceprocesshandle, // handle to source process
handle hsourcehandle, // handle to duplicate
handle htargetprocesshandle, // handle to target process
lphandle lptargethandle, // duplicate handle
dword dwdesiredaccess, // requested access
bool binherithandle, // handle inheritance option
dword dwoptions // optional actions
);
Python資源列表
python資源列表 python資源列表 activestate programmer network debugging in python dive into python jython magnus s python page mark hammond s free stuff non pr...
WINDOWS核心程式設計 核心物件
今天想把看的第三章的心得寫下來。這章主要介紹了核心物件。在windows中,核心物件是由作業系統來管理,儘管使用者能夠建立它,但是在建立之後,使用者對該核心物件的操作都是委託給作業系統。通常使用者建立和使用的物件分為 使用者物件 如 hicon createicon prama gdi物件函式以及核...
Windows核心程式設計 核心物件
每個核心物件只是核心分配的乙個記憶體塊,只能由核心訪問.該記憶體塊是一種資料結構,它的成員負責維護物件的各種資訊,由得物件型別相同,但大多數不同,比如程序物件有個程序id,乙個基本優先順序,乙個退出 檔案物件則有乙個位元組位移,乙個共享模式,乙個開啟模式 如果核心控制代碼傳遞給另外乙個程序,那麼這另...