您的位置:首页 > 其它

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

2010-06-23 10:23 302 查看
本文转自http://eslxf.blog.51cto.com/918801/209246



1.5.3 PacketSetLoopbackBehavior函数

函数PacketSetLoopbackBehavior设置NPF驱动程序对回环数据的处理方式:捕获还是丢弃。函数原型如下:

BOOLEAN PacketSetLoopbackBehavior(LPADAPTER AdapterObject,

UINT LoopbackBehavior)

参数AdapterObject是一个指向一个_ADAPTER结构体的指针。参数LoopbackBehavior可以为NPF_ENABLE_LOOPBACK或NPF_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);
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: