WIndows內核初識--1

  • Windows內核

  • 內核對象  

  •    

  • 常見的內核對象: 文件對象、作業對象、進程對象、信號量對象、線程對象、 互斥量對象、管道對象等。
  • 何爲內核對象: 內核對象是操作系統暴露給開發者的不透明的內核句柄。 爲了保證操作系統的穩定性,windows強化該功能,只能由操作系統操作內核,修改數據結構等對象
  • 如何操作內核對象: 內核對象只能通過windows提供的一組函數來操作內核對象句柄。內核對象句柄是與進程綁定的(增加安全性),不能把內核對象句柄傳遞給其他進程進行操作。
  • 內核對象特性

  • 使用計數: 內核對象的生命週期可能大於創建它的進程,操作系統會紀錄當前使用該對象的進程數,因此在創建內核對象時,一定要關閉內核句柄,closehandle()。 安全性: 幾乎所有創建內核對象的函數都需要傳入一個指向SECURITY_ATTRIBUTES結構作爲參數:
  • LONG RegOpenKeyEx( HKEY hKey, LPCTSTR lpSubKey, DWORD ulOptions, REGSAM samDesired, 

        PHKEY phkResult )

     

    讀取註冊表時samDesired應傳入:key_QUERY_VALUE,而不應該KEY_ALL_ACCESS,否則可能返回ERROR_ACCESS_DENFIED

  • 內核對象命名

  • 許多內核對象都可以進行命名,例如創建文件映射、創建信號對象、互斥量等。

如果不命名可以傳入NULL,注意所有的內核對象共享同一個命名空間,即

 Handle hMutex = CreateMutex(NULL, FALSE, TEXT(“Myname”));

Handle hSemapHore = CreateSemaphore(NULL, 1,1, TEXT(“Myname”));

此時創建信號量函數會返回NULL。

會話範圍命名:

Handle hEvent = CreateEvent(NULL, FALSE, TEXT(“Global\\Myname”));

Handle hEvent = CreateEvent(NULL, FALSE, TEXT(“Local\\Myname”));

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章