天道酬勤Windows內(nèi)核安全VIP
每個內(nèi)核對象都只是一個內(nèi)存塊,由操作系統(tǒng)分配,并只能由操作內(nèi)核訪問。這個內(nèi)存塊是一個數(shù)據(jù)結(jié)構(gòu),其成員維護著與對象有關(guān)的信息。少數(shù)成員如:安全描述符和使用計數(shù)等是所有對象共有的。但其他大多數(shù)成員都是不同類型的對象特有的
為了增強操作系統(tǒng)的可靠性,內(nèi)核對象句柄值是與進程相關(guān)的。所以,如果將句柄值傳給另一個進程,那么另一個進程用此句柄值來進行調(diào)用時,會發(fā)生失敗,更糟糕的是,他們會根據(jù)該句柄在我們進程的句柄表的索引來引用一個可能完全不同類型的內(nèi)核對象
內(nèi)核對象的擁有者是操作系統(tǒng)內(nèi)核,而非進程。內(nèi)核對象的生命期可能會長于創(chuàng)建他的那個線程。操作系統(tǒng)通過內(nèi)核對象的使用計數(shù),來確定內(nèi)核對象的銷毀時間
內(nèi)核對象可以用一個安全描述符來保護。安全描述符描述了誰擁有對象、誰被允許使用和訪問對象。用于創(chuàng)建內(nèi)核對象的所有函數(shù)幾乎都有一個指向SECURITY_ATTRIBUTES結(jié)構(gòu)的指針作為參數(shù),大多數(shù)情況下應(yīng)傳入NULL,這樣創(chuàng)建的內(nèi)核對象具有默認(rèn)安全屬性
一個進程在初始化時,系統(tǒng)將為其分配一個句柄表。這個句柄表僅供內(nèi)核對象使用,一個進程初始化時候,其句柄表為空,當(dāng)進程調(diào)用創(chuàng)建內(nèi)核對象的 API 時,內(nèi)核掃描進程的句柄表,查找一個空白的記錄項并對其進行初始化
創(chuàng)建內(nèi)核對象的 API 調(diào)用失敗,返回值可能是 NULL 也可能是INVALID_HANDLE_VALUE
在不需要使用內(nèi)核對象的時候,記得使用 CloseHandle 來釋放資源