初识内核对象

本文介绍了内核对象的概念、创建方式及判断方法,并列举了常见的内核对象创建函数,包括线程、信号量、互斥量和事件等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近看多线程同步时,谈到了事件对象、互斥对象、信号量对象是内核对象,而关键代码段对象不是内核对象,于是探究了下内核对象。

(1)内核对象概念

内核对象是内核分配的内存块,且只能由内核访问。(内核对象的内存块是一种数据结构,数据结构各种成员维护该内核对象)

(2)内核对象只能被内核访问,所以应用程序无法在内存中找到这些数据结构,并修改它们的内容。

(3)内核对象创建

调用创建内核对象的函数,该函数会返回一个内核对象的句柄。

(4)如何判断一个对象是否是内核对象

通过创建内核对象的函数判断,如果是内核对象,其创建函数中通常有安全属性。

  !!除了内核对象外,你的应用程序也可以使用其他类型的对象,如菜单、窗口、鼠标光标、刷子和字体等。这些对象属于用户对象图形设备接口(GDI)对象,而不是内核对象。


常用的创建内核对象的函数:

HANDLE WINAPI CreateThread(

  LPSECURITY_ATTRIBUTESlpThreadAttributes,

  SIZE_TdwStackSize,

  LPTHREAD_START_ROUTINElpStartAddress,

  LPVOIDlpParameter,

  DWORDdwCreationFlags,

  LPDWORDlpThreadId

);
HANDLE CreateSemaphore(

  LPSECURITY_ATTRIBUTES lpSemaphoreAttributes,

  LONG lInitialCount,

  LONG lMaximumCount,

  LPCTSTR lpName

);
HANDLE CreateMutex(

  LPSECURITY_ATTRIBUTESlpMutexAttributes,

  BOOLbInitialOwner,     

  LPCTSTRlpName

);
HANDLE CreateEvent(

 LPSECURITY_ATTRIBUTESlpEventAttributes,

 BOOLbManualReset,

 BOOLbInitialState,

 LPCTSTRlpName

);





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值