SynchronizationEvent书上写的很垃圾.转载一篇网上的

entercriticalsection用的同步方式就是采用的这个同步对象的方式,但是这个东西用的比较多,所以在内核调试的时候就不容易找到自己想要看的东西了

  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时初始化事件是没信号状态.

LONG KeSetEvent
(
IN PRKEVENT Event,
IN KPRIORITY Increment,
IN BOOLEAN Wait
);

设置事件为有信号状态.

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
);

等待事件信号状态的发生.

LONG KeResetEvent
(
IN PRKEVENT Event
);
复位一个指定事件到没有信号状态并返回以前这个事件的信号状态.
返回非零说明以前是有信号状态;
返回 零说明以前是无信号状态;
5.
VOID KeClearEvent
(
IN PRKEVENT Event
);
设置一个指定事件到没有信号状态.
说明:
KeResetEvent 和 KeClearEvent 都是设置一个指定事件到没有信号状态,
如果不想得到以前这个事件的信号状态的话用 KeClearEvent 更好.

LONG KeReadStateEvent(
IN PRKEVENT Event
);
得到一个给定事件当前的信号状态.
返回非零说明是有信号状态;
返回 零说明是无信号状态;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值