深度剖析WinPcap之(三)——所涉及的Windows驱动基础知识(2)
2009-09-11 00:00:00 来源:WEB开发网BOOLEAN NdisWaitEvent(IN PNDIS_EVENT Event,IN UINT MsToWait);
把一个给定的事件设为信号状态 ,可使用NdisSetEvent函数,
VOID NdisSetEvent(IN PNDIS_EVENT Event);
清除一个给定的事件的信号状态,可使用NdisResetEvent函数,
VOID NdisResetEvent(IN PNDIS_EVENT Event);
下面的代码为WinPcap中使用NDIS库事件的实例:
NDIS_EVENT NdisWriteCompleteEvent;
NTSTATUS NPF_Open(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
{
…
NdisInitializeEvent(&Open->NdisWriteCompleteEvent);
…
}
NTSTATUS NPF_Write(IN PDEVICE_OBJECT DeviceObject,IN PIRP Irp)
{
…
NdisResetEvent(&Open->NdisWriteCompleteEvent);
…
NdisWaitEvent(&Open->NdisWriteCompleteEvent, 0);
…
}
VOID NPF_SendComplete(IN NDIS_HANDLE ProtocolBindingContext,
IN PNDIS_PACKET pPacket,IN NDIS_STATUS Status)
{
…
NdisSetEvent(&Open->NdisWriteCompleteEvent);
…
}
1.1.5.5 用户模式的互斥体
互斥体也是一种常用的同步对象。互斥体可以避免多个线程争夺同一个资源。例如,多线程环境中,只能有一个线程占有互斥体。获得互斥体的线程如果不释放互斥体,其他线程永远不会获得这个互斥体。互斥体的概念类似于同步事件,所不同的是同一个线程可以递归获得互斥体。递归获得互斥体的意思是,得到互斥体的线程还可以再次获得这个互斥体,或者说互斥体对于已经获得互斥体的线程不产生“互斥”关系。而同步事件不能递归获取。
- ››深度解释攻击linux服务器的四种级别
- ››剖析java.util.concurrent锁
- ››剖析Android智能手机系统的更多功能
- ››深度分析地方社区网站的内容定位
- ››剖析Windows Azure Platform框架与组成
- ››剖析使用 ObjectOutputStream 可能引起的内存泄漏...
- ››剖析EWebEditor编辑器漏洞攻击案例
- ››剖析开源云:构建 Infrastructure as a Service 块...
- ››深度剖析 Android 和 iPhone OS
- ››深度分析:HTML5能否成为Flash终结者
- ››深度挖掘 更多Windows 7快捷模式
- ››深度挖掘 Windows 7快捷模式
更多精彩
赞助商链接