WEB开发网
开发学院操作系统windows 2008 深度剖析WinPcap之(三)——所涉及的Windows驱动基... 阅读

深度剖析WinPcap之(三)——所涉及的Windows驱动基础知识(2)

 2009-09-11 00:00:00 来源:WEB开发网   
核心提示: 申请获得自旋锁可以使用 NdisAcquireSpinLock函数,VOID NdisAcquireSpinLock( IN PNDIS_SPIN_LOCK SpinLock );释放自旋锁使用NdisReleaseSpinLock内核函数,深度剖析WinPcap之(三)——所涉及的Window

申请获得自旋锁可以使用 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,其作用是强迫操作系统将当前线程切换到其他线程。

上一页  1 2 3 4 5  下一页

Tags:深度 剖析 WinPcap

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接