概述
互斥体对象(Mutex Objects)是用来支持互斥访问共享资源的一种同步机制, 内核确保同一时间只会有一个线程可以获取Mutex的所有权.
内核永远不会允许将一个拥有Mutex所有权的线程切换到User Mode, 尝试这样做会触发系统崩溃.
互斥体(Mutex)
//初始化
KeInitializeMutex
//获取所有权
KeWaitForMutexObject/KeWaitForXXXXObject(s)
//释放所有权
KeReleaseMutex
允许递归获取所有权, 但每一次'Wait'调用必须对应一次'KeReleaseMutex(释放)'调用.
获取所有权的线程会阻止Normal内核模式APC的交付,但允许Special内核模式APC交付.
需为其分配常驻类型的内存.
快速互斥体(Fast Mutex)
//初始化
ExInitializeFastMutex
//获取所有权
ExAcquireFastMutex/ExTryToAcquireFastMutex
//释放所有权
ExReleaseFastMutex
不允许递归获取所有权, 尝试这样做会引发死锁.
获取所有权的线程会提升IRQL到APC_LEVEL, 因此, 所有APC都会被阻止交付.
执行速度比Mutex快.
守护互斥体(Guarded Mutex)
//初始化
KeInitializeGuardedMute