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);

    }

}

本文出自 “千江月” 博客,请务必保留此出处http://eslxf.blog.51cto.com/918801/209246