深度剖析WinPcap之(七)——获得与释放网络适配器设备列表(2)
2009-09-11 00:00:00 来源:WEB开发网函数首先调用PacketPopulateAdaptersInfoList()函数创建适配器链表g_AdaptersInfoList。接着开始给pStr中填充适配器的名称与描述两个列表,在填充的过程中,需要遍历g_AdaptersInfoList两次,第一次遍历是为了计算第二个列表开始的偏移与检查缓冲区的大小,第二次遍历是为了复制适配器的名称与描述信息。复制数据结束后,在两个列表之间加入分隔符’\0’,并在第二个列表之后添加一个’\0’结束列表。
1.4.2.1 PacketPopulateAdaptersInfoList函数
函数PacketPopulateAdaptersInfoList() 创建适配器的链表g_AdaptersInfoList。该函数先释放掉g_AdaptersInfoList中旧的内容,然后调用 PacketGetAdaptersNPF()函数用新的信息填充该链表。
其主要代码如下所示:
void PacketPopulateAdaptersInfoList()
{
…
/*获得g_AdaptersInfoMutex互斥信号*/
WaitForSingleObject(g_AdaptersInfoMutex, INFINITE);
/*释放g_AdaptersInfoList中旧的内容*/
if(g_AdaptersInfoList)
{
TAdInfo = g_AdaptersInfoList;
while(TAdInfo != NULL) //遍历链表
{
PNPF_IF_ADDRESS_ITEM pItem, pCursor;
Mem2 = TAdInfo;
pCursor = TAdInfo->pNetworkAddresses;
TAdInfo = TAdInfo->Next;
while(pCursor != NULL)
{
pItem = pCursor->Next;
GlobalFreePtr(pCursor); //释放内存
pCursor = pItem;
}
GlobalFreePtr(Mem2); //释放内存
}
g_AdaptersInfoList = NULL;
}
/*用新的信息填充链表*/
if(!PacketGetAdaptersNPF())
{ //失败
…
}
…
//释放g_AdaptersInfoMutex互斥信号
ReleaseMutex(g_AdaptersInfoMutex);
}
- ››深度解释攻击linux服务器的四种级别
- ››剖析java.util.concurrent锁
- ››剖析Android智能手机系统的更多功能
- ››深度分析地方社区网站的内容定位
- ››剖析Windows Azure Platform框架与组成
- ››剖析使用 ObjectOutputStream 可能引起的内存泄漏...
- ››剖析EWebEditor编辑器漏洞攻击案例
- ››剖析开源云:构建 Infrastructure as a Service 块...
- ››深度剖析 Android 和 iPhone OS
- ››深度分析:HTML5能否成为Flash终结者
- ››深度挖掘 更多Windows 7快捷模式
- ››深度挖掘 Windows 7快捷模式
更多精彩
赞助商链接