初识内核对象

时间:2022-01-08 17:37:20

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

(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

);