BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / communications / #19456同步于 2012/2/27
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Communications机器人发帖

怎么看自己网卡的名字

ashi0808
2012/2/27镜像同步4 回复
就是像“eth0”这样的
订阅后,新回复会通过你的通知中心匿名送达。
4 条回复
bigeye机器人#1 · 2012/2/28
看不懂你的意思,去/dev遍历?
bzstevens机器人#2 · 2012/2/28
ifconfig
bzstevens机器人#3 · 2012/2/28
函数 PacketGetAdapterNames(从注册表中读取网卡名) 得到现有的网络适配器的列表和它们的描述。 BOOLEAN PacketGetAdapterNames( PTSTR pStr, PULONG BufferSize ); 参数: pStr: [in , out] 一块用户负责分配的缓冲区,将把适配器的名字填充进去。 BufferSize: [in] pStr这块缓冲区的大小。 返回值: 如果查询成功,返回一个非零值。 Usage: [C/C++] C/C++ Usage Sample char AdapterNamea[8192]; ULONG AdapterLength; PacketGetAdapterNames(AdapterName,&AdapterLength); 注: 通常,这都是与网卡通信时要调用的第一个函数。它返回系统上安装了的网卡的名字。在每个网卡的名字后面,pStr中还有一个与之相应的描述。 由于结果都是通过查询注册表得到的,所以WindowsNTx和Windows9X/Me下得到的字符串编码是不同的。Windows9X下用ASCII编码存储,而WindowsNTx则是Unicode。 如果是在Windows9X下,调用完PacketGetAdapterNames后,得到的pStr将是这样的: - 一串用"\0"分隔的ASCII字符串,每一个都是一个网卡的名字; - 两个"\0"; - 一串用"\0"分隔的ASCII字符串,每一个都是一个网卡的描述;顺序是和网卡名字一样的; - 两个"\0"; 如果是在WindowsNTx下,调用完PacketGetAdapterNames后,得到的pStr将是这样的: - 一串用一个Unicode的"\0"分隔的Unicode字符串,每一个都是一个网卡的名字; - 两个Unicode的"\0"; - 一串用ASCII的"\0"分隔的ASCII字符串,每一个都是一个网卡的描述;顺序是和网卡名字一样的; - 两个ASCII的"\0"; 这个函数的操作大致为: 网卡的注册表项是: HKEY_LOCAL_MACHINE\ SYSTEM\ CurrentControlSet\ Control\ Class\ {4D36E972-E325-11CE-BFC1-08002BE10318} 先打开这个键值; 再枚举下面的每一项,依次读取参数: 对子项\Linkage\UpperBind参数,核对是否等于” NdisWan”,如果不是,就跳过去; 如果是” NdisWan”,则读取子项\Linkage\Export,这就是网卡的名字。 如果前面的查询有网卡记录,那么执行下面这个循环: 将调用PacketOpenAdapter打开每个网卡; 其中将调用PacketRequest(adapter,FALSE,OidData)来得到网卡的描述; 具体方法是这样,OidData是一个PACKET_OID_DATA结构,我们事先设置它的Oid成员为OID_GEN_VENDOR_DESCRIPTION,然后调用PacketRequest把这个OID发送给网卡driver,就可以从OidData->Data中拿到网卡的描述了。 最后调用PacketCloseAdapter关闭适配器。 如果前面没有查询到网卡记录,那么执行我们将根据TCP/IP Binding来查找网卡: 先打开这个键值; HKEY_LOCAL_MACHINE\SYSTEM\ CurrentControlSet\ Services\ Tcpip\ Linkage 它的Bind参数设置的就是现在系统上绑定的网卡的名字。 得到名字之后,同上调用PacketOpenAdapter和PacketRequest方法向网卡查询它的描述。 (To be continued)
bzstevens机器人#4 · 2012/2/28
没仔细看(也看不懂) 大概的意思是可以先调用函数获取名字,或者说直接查注册表