深度剖析WinPcap之(七)——获得与释放网络适配器设备列表(3)
2009-09-11 00:00:00 来源:WEB开发网函数首先对适配器的名称AdapterName 考虑兼容性,必要时提供Unicode字符串到ASCII码字符串的转换。接着在一个类型为ADAPTER_INFO的全局链表 g_AdaptersInfoList中更新该适配器的信息。然后在该链表中查找与该适配器关联的PADAPTER_INFO结构体,如果查找成功,则给 buffer存储npf_if_addr类型的数据,并返回。
函数的主要代码实现如下:
BOOLEAN PacketGetNetInfoEx(PCHAR AdapterName, npf_if_addr* buffer, PLONG NEntries)
{
PADAPTER_INFO TAdInfo;
PCHAR Tname;
BOOLEAN Res, FreeBuff;
/*提供字符串转换,为了后向兼容。
*WChar2SChar函数把一个Unicode字符串转换为一个ASCII码字符串, *WChar2SChar函数为执行转换分配了新的内存空间,内存需要释放
*/
if(AdapterName[1] != 0)
{ //ASCII字符串
Tname = AdapterName;
FreeBuff = FALSE;
}
else
{
Tname = WChar2SChar((PWCHAR)AdapterName);
FreeBuff = TRUE; //内存需要释放
}
/*
*更新该适配器的信息。
*PacketUpdateAdInfo函数在一个全局ADAPTER_INFO类型的链表*g_AdaptersInfoList中更新一个适配器的信息。
*/
if(!PacketUpdateAdInfo(Tname))
{
//更新失败,函数返回
if(FreeBuff)
GlobalFreePtr(Tname);
return FALSE;
}
/*获得g_AdaptersInfoMutex互斥信号*/
WaitForSingleObject(g_AdaptersInfoMutex, INFINITE);
/*
*在全局的ADAPTER_INFO链表查找与适配器关联的PADAPTER_INFO结构体
*/
TAdInfo = PacketFindAdInfo(Tname);
if(TAdInfo != NULL)
{//查找成功
LONG numEntries = 0, i;
PNPF_IF_ADDRESS_ITEM pCursor;
//获取该适配器的npf_if_addr类型的地址链表
pCursor = TAdInfo->pNetworkAddresses;
//计算地址链表的元素个数numEntries,
while(pCursor != NULL)
{
numEntries ++;
pCursor = pCursor->Next;
}
//且NEntries=min(numEntries, NEntries)
if (numEntries < *NEntries)
{
*NEntries = numEntries;
}
//给buffer存储npf_if_addr类型的数据
pCursor = TAdInfo->pNetworkAddresses;
for (i = 0; (i < *NEntries) && (pCursor != NULL); i++)
{
buffer[i] = pCursor->Addr;
pCursor = pCursor->Next;
}
Res = TRUE;
}
else
{//查找失败
TRACE_PRINT("PacketGetNetInfoEx: Adapter not found");
Res = FALSE;
}
/*释放g_AdaptersInfoMutex互斥信号*/
ReleaseMutex(g_AdaptersInfoMutex);
if(FreeBuff)
GlobalFreePtr(Tname);
return Res;
}
- ››深度解释攻击linux服务器的四种级别
- ››剖析java.util.concurrent锁
- ››剖析Android智能手机系统的更多功能
- ››深度分析地方社区网站的内容定位
- ››剖析Windows Azure Platform框架与组成
- ››剖析使用 ObjectOutputStream 可能引起的内存泄漏...
- ››剖析EWebEditor编辑器漏洞攻击案例
- ››剖析开源云:构建 Infrastructure as a Service 块...
- ››深度剖析 Android 和 iPhone OS
- ››深度分析:HTML5能否成为Flash终结者
- ››深度挖掘 更多Windows 7快捷模式
- ››深度挖掘 Windows 7快捷模式
更多精彩
赞助商链接