1. VOID KeInitializeEvent(IN PRKEVENT Event, IN EVENT_TYPE Type, IN BOOLEAN State);
Type : 事件類型,可以是 NotificationEvent 和 而SynchronizationEvent.
NotificationEvent
等待一個IO操作完成.當一個NotificationEvent事件用KeSetEvent設定成訊號狀態時,
所有等待在該事件上的線程都會開始執行,這是因為此類型事件不會自動清除訊號,它
保留訊號狀態直到你手工用KeResetEvent 或 KeClearEvent 清除這個事件的訊號狀態.
SynchronizationEvent
等待一個IO操作完成.當一個NotificationEvent事件用KeSetEvent設定成訊號狀態時,
則只能讓等待在該事件上的單個線程開始執行,其它會繼續等待,這是因為此類型在執
行 KeWaitForMultipleObjects 或 KeWaitForSingleObject 之後會自動清除這個事件
的訊號狀態, 而不必手工用 KeResetEvent 或 KeClearEvent 清除這個事件的訊號狀
態.
State : 指明事件的訊號初始化狀態.
當是TRUE 時初始化事件是有訊號狀態.
當是FALSE時初始化事件是沒訊號狀態.
2.
LONG KeSetEvent
(
IN PRKEVENT Event,
IN KPRIORITY Increment,
IN BOOLEAN Wait
);
設定事件為有訊號狀態.
3.
NTSTATUS KeWaitForMultipleObjects
(
IN ULONG Count,
IN PVOID Object[],
IN WAIT_TYPE WaitType,
IN KWAIT_REASON WaitReason,
IN KPROCESSOR_MODE WaitMode,
IN BOOLEAN Alertable,
IN PLARGE_INTEGER Timeout OPTIONAL,
IN PKWAIT_BLOCK WaitBlockArray OPTIONAL
);
或
NTSTATUS KeWaitForSingleObject
(
IN PVOID Object,
IN KWAIT_REASON WaitReason,
IN KPROCESSOR_MODE WaitMode,
IN BOOLEAN Alertable,
IN PLARGE_INTEGER Timeout OPTIONAL
);
等待事件訊號狀態的發生.
4.
LONG KeResetEvent
(
IN PRKEVENT Event
);
複位一個指定事件到沒有訊號狀態並返回以前這個事件的訊號狀態.
返回非零說明以前是有訊號狀態;
返回 零說明以前是無訊號狀態;
5.
VOID KeClearEvent
(
IN PRKEVENT Event
);
設定一個指定事件到沒有訊號狀態.
說明:
KeResetEvent 和 KeClearEvent 都是設定一個指定事件到沒有訊號狀態,
如果不想得到以前這個事件的訊號狀態的話用 KeClearEvent 更好.
6.
LONG KeReadStateEvent(
IN PRKEVENT Event
);
得到一個給定事件當前的訊號狀態.
返回非零說明是有訊號狀態;
返回 零說明是無訊號狀態;