最近看多线程同步时,谈到了事件对象、互斥对象、信号量对象是内核对象,而关键代码段对象不是内核对象,于是探究了下内核对象。
(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 );