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 也称为 自动重新设置 或 自动 事件。 设置此类事件后,单个等待线程将有资格执行。 每次满足等待时,内核都会自动将事件重置为未发出信号的状态。 驱动程序可以使用同步事件来保护用于同步多个线程作的共享资源。
有关事件对象的详细信息,请参阅 事件对象。