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”));

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