深度剖析WinPcap之(八)——打开与关闭适配器(16)

本文转自http://eslxf.blog.51cto.com/918801/209246

 

1.5.3        PacketSetLoopbackBehavior函数

函数PacketSetLoopbackBehavior设置NPF驱动程序对回环数据的处理方式:捕获还是丢弃。函数原型如下:
BOOLEAN PacketSetLoopbackBehavior(LPADAPTER  AdapterObject,
UINT LoopbackBehavior)
参数AdapterObject是一个指向一个_ADAPTER结构体的指针。参数LoopbackBehavior可以为NPF_ENABLE_LOOPBACKNPF_DISABLE_LOOPBACK,分别表示激活或禁止回环数据捕获。
如果函数成功,返回非0值。
注意:适配器打开时,回环数据包捕获是激活了的。
函数主要调用下列语句实现:
result = (BOOLEAN)DeviceIoControl(AdapterObject->hFile,
        BIOCISETLOBBEH,
        &LoopbackBehavior,
        sizeof(UINT),
        NULL,
        0,
        &BytesReturned,
        NULL);
最后由NPF驱动程序的NPF_IoControl函数的case BIOCISETLOBBEH: 分支语句在底层实现。
 

1.5.4    PacketCloseAdapter函数

在库wpcap.dllpcap_cleanup_win32函数调用PacketCloseAdapter()函数关闭适配器。函数PacketCloseAdapter()的作用就是关闭一个给定的适配器并释放相关联的ADAPTER结构体资源。函数原型如下:
VOID PacketCloseAdapter(LPADAPTER lpAdapter)
参数lpAdapter为指向待关闭适配器的指针。
函数的主要代码如下:
VOID PacketCloseAdapter(LPADAPTER lpAdapter)
{
     /*检查输入参数的合法性*/
    if(!lpAdapter)
    { //失败,函数返回
       return;
    }
     /*
*根据lpAdapter->Flags检查适配器的类型,分别处理,
*此处只考虑正常的NPF适配器
*/
    if (lpAdapter->Flags != INFO_FLAG_NDIS_ADAPTER)
    { //试图关闭一个不明类型的适配器
    }
    else
    {  //释放各种资源
       SetEvent(lpAdapter->ReadEvent);
        CloseHandle(lpAdapter->ReadEvent);
       CloseHandle(lpAdapter->hFile);
       GlobalFreePtr(lpAdapter);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值