深度剖析WinPcap之(七)——获得与释放网络适配器设备列表(3)
2009-09-11 00:00:00 来源:WEB开发网函数PacketGetNetInfoEx()主要调用了PacketUpdateAdInfo()与 PacketFindAdInfo()函数。
1.4.3.1 PacketUpdateAdInfo函数
函数PacketUpdateAdInfo()在一个全局链表g_AdaptersInfoList中更新一个适配器的信息。其原型如下:
BOOLEAN PacketUpdateAdInfo(PCHAR AdapterName);
参数AdapterName是所需更新信息的适配器名称。
如果函数成功返回TRUE,一个false值意味着适配器不可用或没有被连接。
函数PacketUpdateAdInfo()首先检查适配器AdapterNam节点在g_AdaptersInfoList链表中是否存在,如果存在则销毁该节点。然后获得适配器AdapterName的信息,并把该节点信息更新到g_AdaptersInfoList适配器链表中。
函数的主要代码实现如下:
BOOLEAN PacketUpdateAdInfo(PCHAR AdapterName)
{
PADAPTER_INFO TAdInfo, PrevAdInfo;
/*获得g_AdaptersInfoMutex互斥信号*/
WaitForSingleObject(g_AdaptersInfoMutex, INFINITE);
PrevAdInfo = TAdInfo = g_AdaptersInfoList;
/*
*如果适配器AdapterNam节点在g_AdaptersInfoList链表中存在,
*则销毁该节点。
*/
while(TAdInfo != NULL)
{
if(strcmp(TAdInfo->Name, AdapterName) == 0)
{
if(TAdInfo == g_AdaptersInfoList)
{
g_AdaptersInfoList = TAdInfo->Next;
}
else
{
PrevAdInfo->Next = TAdInfo->Next;
}
if (TAdInfo->pNetworkAddresses != NULL)
{
PNPF_IF_ADDRESS_ITEM pItem, pNext;
pItem = TAdInfo->pNetworkAddresses;
//释放网络地址链表
while(pItem != NULL)
{
pNext = pItem->Next;
GlobalFreePtr(pItem);
pItem = pNext;
}
}
GlobalFreePtr(TAdInfo);//释放该适配器信息节点
break;
}
PrevAdInfo = TAdInfo;
TAdInfo = TAdInfo->Next;
}
/*释放g_AdaptersInfoMutex互斥信号*/
ReleaseMutex(g_AdaptersInfoMutex);
/*
*获得适配器AdapterName的信息,
*并把该节点信息添加到g_AdaptersInfoList适配器链表中。
*/
if(PacketAddAdapterNPF(AdapterName, 0) == TRUE)
{
//信息更新成功
return TRUE;
}
return TRUE;
}
- ››深度解释攻击linux服务器的四种级别
- ››剖析java.util.concurrent锁
- ››剖析Android智能手机系统的更多功能
- ››深度分析地方社区网站的内容定位
- ››剖析Windows Azure Platform框架与组成
- ››剖析使用 ObjectOutputStream 可能引起的内存泄漏...
- ››剖析EWebEditor编辑器漏洞攻击案例
- ››剖析开源云:构建 Infrastructure as a Service 块...
- ››深度剖析 Android 和 iPhone OS
- ››深度分析:HTML5能否成为Flash终结者
- ››深度挖掘 更多Windows 7快捷模式
- ››深度挖掘 Windows 7快捷模式
更多精彩
赞助商链接