windows筆記-內核對象

有哪些內核對象?

如下:存取符號對象、事件對象文件對象文件映射對象、I / O 完成端口對象、作業對象、信箱對象互斥對象、管道對象、進程對象信標對象線程對象等待計時器對象等。這些對象都是通過調用函數來創建的。

 

什麼是內核對象?

內核對象只是內核分配的一個內存塊,並且只能由該內核訪問。該內存塊是一種數據結構,它的成員負責維護該對象的各種信息。有些數據成員(如安全性描述符、使用計數等)在所有對象類型中是相同的,但大多數數據成員屬於特定的對象類型。例如,進程對象有一個進程I D 、一個基本優先級和一個退出代碼,而文件對象則擁有一個字節位移、一個共享模式和一個打開模式。


內核對象的數據結構只能被內核訪問,因此應用程序無法在內存中找到這些數據結構並直接改變它們的內容Microsoft 規定了這個限制條件,目的是爲了確保內核對象結構保持狀態的一致。這個限制也使Microsoft能夠在不破壞任何應用程序的情況下在這些結構中添加、 刪除和修改數據成員。


當調用一個用於創建內核對象的函數時,該函數就返回一個用於標識該對象的句柄。爲了使操作系統變得更加健壯,這些句柄值是與進程密切相關的。因此,如果將該句柄值傳遞給另一個進程中的一個線程,那麼這另一個進程使用你的進程的句柄值所作的調用就會失敗。如果想在多個進程中共享內核對象,要通過一定的機制

如對象句柄的繼承性,命名對象,複製對象句柄。

 

  除了內核對象外,你的應用程序也可以使用其他類型的對象,如菜單、窗口、鼠標光標、刷子和字體等。這些對象屬於用戶對象圖形設備接口(GDI)對象,而不是內核對象。

 

當初次着手爲若要確定一個對象是否屬於內核對象,最容易的方法是觀察創建該對象所用的函數。創建內核對象的所有函數幾乎都有一個參數,你可以用來設定安全屬性的信息(請參考windows筆記-內核對象的安全性)。

 

下面列出了部分用於創建內核對象的一些函數:

HANDLE CreateThread( PSECURITY_ATTRIBUTES psa, DWORD dwStackSize, PTHREAD_START_ROUTINE pfnStartAddr, PVOID pvParam, DWORD dwCreationFlags, PDWORD pdwfhreadId); HANDLE CreateFile( PCTSTR pszFileName, DWORD dwDesiredAccebS, DWORD dwShareMode, PSECURITY_ATTRIBUTES psa, DWORD dwCreationDistribution, DWORD dwFlagsAndAttnbutes, HANDEE hTemplateFile); HANDLE CreateFileMapping( HANDLE hFile, PSECURITY_ATTRIBUTES psa, DWORD flProtect, DWORD dwMdximumSizcHigh, DWORD dwMaximumSizeLow, PCTSTR pszName); HANDLE CreateSemaphore( PSECURITY_ATTRIBUTES psa, LONG lInitialCount, LONG lMaximumCount, PCTSTR pszName);
發佈了3 篇原創文章 · 獲贊 1 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章