日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

应用程序对象正在关闭_Windows核心编程-内核对象

發(fā)布時間:2025/3/20 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 应用程序对象正在关闭_Windows核心编程-内核对象 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

概念:內(nèi)核對象可以供系統(tǒng)和應(yīng)用程序使用來管理各種各樣的資源,Windows程序員可以調(diào)用Windows API去創(chuàng)建、打開和操作各種內(nèi)核對象。常見的內(nèi)核對象有:訪問令牌、事件對象、文件對象、文件映射對象、I/O完成端口、作業(yè)對象、郵件槽對象、互斥量對象、管道對象、進程對象、信號量對象、線程對象、可等待計時器對象以及線程池工廠對象等。

本質(zhì):內(nèi)核對象本質(zhì)上是由操作系統(tǒng)內(nèi)核分配的一個內(nèi)存塊,并且只能由操作系統(tǒng)內(nèi)核訪問(應(yīng)用程序不能再內(nèi)存中定位該內(nèi)存塊并直接更改其內(nèi)容,只能通過Windows提供的一組函數(shù)來操作這些結(jié)構(gòu))。這個內(nèi)存塊的數(shù)據(jù)結(jié)構(gòu)維護著與對象相關(guān)的信息。其中安全描述符和使用計數(shù)器是所有內(nèi)核對象都有的數(shù)據(jù)成員,但大多數(shù)成員都是不同的類型所特有的,例如進程對象的進程ID,文件對象的字節(jié)偏移量等。

操作內(nèi)核對象:通過調(diào)用內(nèi)核對象創(chuàng)建函數(shù)(Windows API,如CreateFileMapping)會返回一個內(nèi)核對象句柄,該句柄的位數(shù)與操作系統(tǒng)的位數(shù)一致。為了增強操作系統(tǒng)可靠性,句柄與進程相關(guān)聯(lián)(即使句柄值相同,再不同進程間表示的內(nèi)核對象也是不一樣的)。

使用計數(shù):內(nèi)核對象的所有者是操作系統(tǒng)而非進程,即內(nèi)核對象的生命周期并不一定會隨著創(chuàng)建該對象的進程的消亡而消亡,這一點是通過使用計數(shù)來實現(xiàn)的。使用計數(shù)是所有內(nèi)核對象固有的屬性,操作系統(tǒng)通過使用計數(shù)維護內(nèi)核對象的生命周期,當(dāng)使用計數(shù)為0的時候,操作系統(tǒng)將銷毀該內(nèi)核對象。內(nèi)核對象被創(chuàng)建時,其使用計數(shù)為1,另一個進程訪問該內(nèi)核對象后,使用計數(shù)加1,當(dāng)進程終止時,使用計數(shù)減1。

內(nèi)核對象安全性:內(nèi)核對象的安全性是有內(nèi)核對象的一個叫安全描述符的屬性來保證的。創(chuàng)建內(nèi)核對象的API通常有一個指向SECURITY_ATTRIBUTES結(jié)構(gòu)體的指針作為參數(shù),該結(jié)構(gòu)體描述了誰擁有對象(一般是內(nèi)核對象的創(chuàng)建者)、哪些組和用戶允許被訪問和使用此對象、哪些組和用戶被拒絕訪問此對象。

typedef struct _SECURITY_ATTRIBUTES{

DWORD nlength;//結(jié)構(gòu)體大小

LPVOID lpSecurityDescriptor;//

BOOL bInheritHandle;//

}SECURITY_ATTRIBUTES

進程內(nèi)核對象句柄表:前面講過句柄與進程相關(guān)聯(lián),這是通過進程的句柄表來實現(xiàn)的,進程初始化時,系統(tǒng)將為它分配一個句柄表,用以存在內(nèi)核對象。可以將句柄表看成一個數(shù)組,每個數(shù)組成員存放一個句柄的相關(guān)信息:指向內(nèi)核對象的指針、一個訪問掩碼和一些標(biāo)志。

創(chuàng)建和關(guān)閉內(nèi)核對象:當(dāng)進程首次初始化的時候,其句柄表為空,當(dāng)進程內(nèi)的一個線程調(diào)用一個會創(chuàng)建內(nèi)核對象的函數(shù)時,操作系統(tǒng)將為這個對象分配并初始化一塊內(nèi)存,然后掃描進程的句柄表,查找到一個空白的記錄項,填入該內(nèi)核對象的相關(guān)信息,最后返回對象句柄。可以調(diào)用CloseHandle來關(guān)閉內(nèi)核對象句柄,該函數(shù)首先檢查主調(diào)進程的句柄表,驗證被關(guān)閉的對象句柄值是該經(jīng)常確實有權(quán)訪問的一個對象,如果句柄有效,系統(tǒng)將獲得內(nèi)核對象的數(shù)據(jù)結(jié)構(gòu)地址,并將使用計數(shù)減1,如果使用計數(shù)變?yōu)?,內(nèi)核對象將被銷毀,并從內(nèi)存中除去。一個內(nèi)核對象不用了應(yīng)該調(diào)用CloseHandle關(guān)閉對象,否則程序運行時將泄漏內(nèi)核對象,當(dāng)然,當(dāng)進程終止后,也能保證內(nèi)核對象被正確清除。

注意內(nèi)核對象和用對象(GDI對象)的區(qū)別:內(nèi)核對象創(chuàng)建時有安全屬性(SECURITY_ATTRIBUTES),而用戶對象或GDI對象沒有。

總結(jié)

以上是生活随笔為你收集整理的应用程序对象正在关闭_Windows核心编程-内核对象的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。