深度剖析WinPcap之(三)——所涉及的Windows驱动基础知识(2)
2009-09-11 00:00:00 来源:WEB开发网互斥体也有两种状态,激发态和未激发态。如果线程获得互斥体时,此时的状态是未激发态,当释放互斥体时,互斥体的状态为激发态。
初始化互斥体的函数是CreateMutex,其函数声明如下;
HANDLE CreateMutex(
LPSECURITY_ATTRIBUTES lpMutexAttributes, //安全属性
BOOL bInitialOwner, //初始化的占有状态
LPCTSTR lpName //对象名称
);
其中第二个参数blIutialOwner表明初始化时是否被占有。如果没有被占有,则为激发态,否则为未激发态。另外,获得互斥体的函数是WaitForSingleObject函数,而释放互斥体的函数是ReleaseMutex函数。
下面的代码为WinPcap中使用使用互斥体的实例:
HANDLE g_AdaptersInfoMutex = NULL;
g_AdaptersInfoMutex = CreateMutex(NULL, FALSE, NULL);
WaitForSingleObject(g_AdaptersInfoMutex, INFINITE);
…
ReleaseMutex(g_AdaptersInfoMutex);
1.1.5.6 变量的原子操作
内核提供了对一个变量进行原子操作,如递增、递减或设置指定的值,的函数。
对一个变量进行原子递增操作,可使用InterlockedIncrement函数。
LONG InterlockedIncrement(IN PLONG Addend);
参数Addend指向一个 LONG型的变量。
函数返回递增了的值。
对一个变量进行原子递减操作,可使用InterlockedDecrement函数。
LONG InterlockedDecrement (IN PLONG Addend);
参数Addend指向一个 LONG型的变量。
函数返回递减了的值。
对一个变量进行原子设置指定值的操作,可使用InterlockedExchange函数。
LONG InterlockedExchange(IN OUT PLONG Target,IN LONG Value);
参数Target指向一个 需要进行设置的LONG型变量,参数Value 为需要设置的值。
函数返回参数Target所指的初始值。
下面的代码为WinPcap中使用原子操作的实例:
ULONG g_NumOpenedInstances = 0;
NTSTATUS NPF_Open(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
{
…
localNumOpenedInstances =
InterlockedIncrement(&g_NumOpenedInstances);
…
}
NTSTATUS NPF_Cleanup(IN PDEVICE_OBJECT DeviceObject,IN PIRP Irp)
{
…
localNumOpenInstances =
InterlockedDecrement(&g_NumOpenedInstances);
…
}
出处:http://eslxf.blog.51cto.com/918801/196913
- ››深度解释攻击linux服务器的四种级别
- ››剖析java.util.concurrent锁
- ››剖析Android智能手机系统的更多功能
- ››深度分析地方社区网站的内容定位
- ››剖析Windows Azure Platform框架与组成
- ››剖析使用 ObjectOutputStream 可能引起的内存泄漏...
- ››剖析EWebEditor编辑器漏洞攻击案例
- ››剖析开源云:构建 Infrastructure as a Service 块...
- ››深度剖析 Android 和 iPhone OS
- ››深度分析:HTML5能否成为Flash终结者
- ››深度挖掘 更多Windows 7快捷模式
- ››深度挖掘 Windows 7快捷模式
更多精彩
赞助商链接