深度剖析WinPcap之(三)——所涉及的Windows驱动基础知识(2)
2009-09-11 00:00:00 来源:WEB开发网申请获得自旋锁可以使用 NdisAcquireSpinLock函数。
VOID NdisAcquireSpinLock( IN PNDIS_SPIN_LOCK SpinLock );
释放自旋锁使用NdisReleaseSpinLock内核函数,
VOID NdisReleaseSpinLock(IN PNDIS_SPIN_LOCK SpinLock );
下面的代码为WinPcap中使用自旋锁的实例:
NDIS_SPIN_LOCK WriteLock;//在_OPEN_INSTANCE声明自旋锁
NdisAllocateSpinLock(&Open->WriteLock);//初始化自旋所
NdisAcquireSpinLock(&Open->WriteLock);// 申请获得自旋锁
if(Open->WriteInProgress)
{
NdisReleaseSpinLock(&Open->WriteLock); // 释放自旋锁
SET_FAILURE_UNSUCCESSFUL();
break;
}
else
{
Open->WriteInProgress = TRUE;
}
NdisReleaseSpinLock(&Open->WriteLock);// 释放自旋锁
1.1.5.2 用户模式的等待
在应用程序中,可以使用WaitForSingleObject等待一个同步对象。WaitForSingleObject函数声明如下:
DWORD WaitForSingleObject(
HANDLE hHandle, //同步对象句柄
DWORD dwMilliseconds //等待时间
);
第二个参数dwMiUiseconds是等待时间,单位为毫秒。同步对象有两种状态,一种是激发状态,一种是未激发状态。如果同步对象处于未激发状态,WaitForSingleObject则进入休眠,等待同步对象被激发。如果同步对象在指定的等待时间内,还没有处于激发状态,则自动停止休眠。dwMilliseconds也可以设定为INFINITE.这表示无限期地等待下去。另外,dwMilliseconds也可以为0,其作用是强迫操作系统将当前线程切换到其他线程。
- ››深度解释攻击linux服务器的四种级别
- ››剖析java.util.concurrent锁
- ››剖析Android智能手机系统的更多功能
- ››深度分析地方社区网站的内容定位
- ››剖析Windows Azure Platform框架与组成
- ››剖析使用 ObjectOutputStream 可能引起的内存泄漏...
- ››剖析EWebEditor编辑器漏洞攻击案例
- ››剖析开源云:构建 Infrastructure as a Service 块...
- ››深度剖析 Android 和 iPhone OS
- ››深度分析:HTML5能否成为Flash终结者
- ››深度挖掘 更多Windows 7快捷模式
- ››深度挖掘 Windows 7快捷模式
更多精彩
赞助商链接