KeInitializeEvent 函数 (wdm.h)
KeInitializeEvent 例程将事件对象初始化为同步 (单个服务员) 或通知类型事件,并将其设置为有信号或未发出信号的状态。
语法
void KeInitializeEvent(
[out] PRKEVENT Event,
[in] EVENT_TYPE Type,
[in] BOOLEAN State
);
参数
[out] Event
指向调用方为其提供存储的事件对象的指针。
[in] Type
指定事件类型, 即 NotificationEvent 或 SynchronizationEvent。
[in] State
指定事件的初始状态。 TRUE 表示信号状态。
返回值
无
备注
事件对象的存储必须驻留在驱动程序创建的设备对象的设备扩展中、驱动程序创建的控制器对象的控制器扩展中,或位于调用方分配的非分页池中。 如果在堆栈上分配事件,则必须在调用 KeWaitForSingleObject、KeWaitForMutexObject 或 KeWaitForMultipleObjects 时指定 KernelMode 等待。 在 KernelMode 等待期间,包含事件的堆栈不会分页。
驱动程序通常使用 NotificationEvent 来等待 I/O 操作完成。 当通知事件设置为已发出信号的状态时,等待事件设置为信号状态的所有线程都将符合执行条件。 事件将一直处于信号状态,直到线程调用 KeResetEvent 或 KeClearEvent 以将事件设置为非信号状态。
SynchronizationEvent 也称为自动重置或自动清理事件。 设置此类事件后,单个等待线程将有资格执行。 每次满足等待时,内核会自动将事件重置为未发出信号的状态。 驱动程序可以使用同步事件来保护用于同步多个线程操作的共享资源。
有关事件对象的详细信息,请参阅 事件对象。