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

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.dll pcap_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);
    }
}

你可能感兴趣的:(职场,休闲,winpcap)