关于Windows核心编程中的内核对象

对内核对象的理解。

何为内核对象:

             访问令牌对象,事件对象,文件对象,文件映射对象,I/O 完成端口对象,作业对象,邮件槽(mailslot)对象,互斥量对象(mutex),管道(pipe)对象,进程对象,信        号量(semaphore)对象,线程对象,可等待的计时器(waitable timer)对象,以及线程池工厂(thread pool worker factory)对象等。

我们可以利用 WinObj工具可以查看内核对像类型的类表。


内核对象用于管理进程线程和文件。

每个内核对象都只是一个内存块,它由操作系统内核分配,并只能由操作系统内核访问。这个内存块是一个数据结构,其成员维护者与对象相关的信息。

对于进程对象有一个进程ID,一个基本的优先级和一个退出代码;而文件对象有一个字节偏移量,一个共享模式和一个打开模式。

因为内核对象的数据结构只能有操作系统内核来访问,所以应用程序不能在内存中定位这些数据结构并直接更改内容。

为了让操作系统知道我们要对哪个内核对象进行操作,我们需要将这个句柄传给各种Windows函数。


介绍3中机制,来实现多个进程成功共享同一个内核对象。

1.使用计数.: 操作系统内核知道当前有多少个进程正在使用一个特定的内核对象。

2.内核对象的安全性

              内核对象可以用一个安全描述符(Security descriptor, SD)来保护。 安全描述符描述了谁拥有对象; 哪些组和用户被允许访问或使用此对象。

typedef struct _SECURITY_ATTRIBUTES {
    DWORD nLength;
    LPVOID lpSecurityDescriptor;
    BOOL bInheritHandle;
} SECURITY_ATTRIBUTES, *PSECURITY_ATTRIBUTES, *LPSECURITY_ATTRIBUTES;

如果想对我们创建的内核对象加以访问限制,就必须创建一个安全描述符。

初始化它

SECURITY_ATTRIBUTES sa;

sa.nLength = sizeof sa;

sa.lpSecurityDescriptor = &sd_wideopen;

sa.bInheritHable = FALSE;

HANDLE m_hMutexHandle = ::CreateMutex(& sa, FALSE, "7k7k_LH_FlashTips_2010-10-26");





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值