关于检测网卡连接状态的问题.100分放送.

时间:2021-01-13 17:24:02
在2K下我们拔下网线插头后系统会提示网络连接有问题,但如何用程序代码获取这个事件呢?望高手解答!

17 个解决方案

#1


我只搞定了WinXP下的,NT和ME下的,郁闷阿!

我帮你顶一定!

#2


Sorry,应该是

“我只搞定了WinXP下的。NT和ME下的,郁闷啊!” 

:)


xp下的话,用 MIB_IFROW 中的 dwOperStatus 来判断。
郁闷的是,怎么在NT和ME下,该值居然恒为"1",请高手来递招啊~!

#3


elyta(卧姿伤痕地) 
   兄台可否告知如何在xp下获取状态的呢?

#4


怎么没有人来顶一下呢,问题真的太难了吗?

我自己顶!

我自己顶!

我自己顶!

顶了我也给分!!!

#5


定时向网关或者dns服务器发包
嘿嘿

#6


在2000下该如何检测呢

#7


复制自 WIN 2K DDK NDIS MINIPORT:
______________________________________________

OID_GEN_CO_MEDIA_CONNECT_STATUS
This OID requests the miniport to return the connection status of the NIC on the 
network as one of the following system-defined values:

NdisMediaStateConnected
NdisMediaStateDisconnected 

[ When a NIC miniport senses that the network connection has been lost, it should call NdisMCoIndicateStatus with NDIS_STATUS_MEDIA_DISCONNECT. When the connection is restored, it should call NdisMCoIndicateStatus with NDIS_STATUS_MEDIA_CONNECT. ]

#8


everandforever(Forever) :
     能否给点更详尽的描述?请问从那里可以得到2K的DDK?谢谢!

#9


IP_ADAPTER_INFO AdapterInfo[2] = {0};
DWORD dwBufLen = sizeof(AdapterInfo);
DWORD status = GetAdaptersInfo(AdapterInfo,&dwBufLen);

MIB_IFROW ifrow;
memset(&ifrow,0,sizeof(MIB_IFROW));
ifrow.dwIndex = AdapterInfo->Index;
PMIB_IFROW pIfRow(&ifrow);
GetIfEntry(&ifrow);

#10


elyta(卧姿伤痕地) 大哥:
    您所写的例程中需要用到的IPIfCons.h,Iphlpapi.h,Iphlpapi.libey及相应的DLL文件包含在SDK开发包中,请问从那里可下载这个开发包?

#11


Iphlpapi.h 的话直接include就好了。

但是如果要用到MIB_IFROW这个结构的话,还给再include "lm.h"和在编译选项中加"Netapi32.lib"。

#12


顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶

#13


用NotifyRouteChange监控一下事件,然后再用上面的方法判断事件。类型

#14


定时向网卡发送NCBENUM命令,以获取当前机器的网卡信息,

#15


请问如何向网卡发送NCBENUM命令呢?

#16


springzcq(冬天来了春天还会远吗) ( ) :
   您的意思是说调用用Netbios(PNCB pncb)吗?但函数只返回网卡号啊,并不能得到网卡的当前状态!

#17


我发现使用GetAdaptersInfo()函数得到的网卡信息并不正确,而且在98和2K下信息还有很大的不同。98下边IP地址与网卡的对应关系和适配器类型也不能正确分辨,PPP Adapter成了MIB_IF_TYPE_ETHERNET类型的网卡,真是怪事!

#1


我只搞定了WinXP下的,NT和ME下的,郁闷阿!

我帮你顶一定!

#2


Sorry,应该是

“我只搞定了WinXP下的。NT和ME下的,郁闷啊!” 

:)


xp下的话,用 MIB_IFROW 中的 dwOperStatus 来判断。
郁闷的是,怎么在NT和ME下,该值居然恒为"1",请高手来递招啊~!

#3


elyta(卧姿伤痕地) 
   兄台可否告知如何在xp下获取状态的呢?

#4


怎么没有人来顶一下呢,问题真的太难了吗?

我自己顶!

我自己顶!

我自己顶!

顶了我也给分!!!

#5


定时向网关或者dns服务器发包
嘿嘿

#6


在2000下该如何检测呢

#7


复制自 WIN 2K DDK NDIS MINIPORT:
______________________________________________

OID_GEN_CO_MEDIA_CONNECT_STATUS
This OID requests the miniport to return the connection status of the NIC on the 
network as one of the following system-defined values:

NdisMediaStateConnected
NdisMediaStateDisconnected 

[ When a NIC miniport senses that the network connection has been lost, it should call NdisMCoIndicateStatus with NDIS_STATUS_MEDIA_DISCONNECT. When the connection is restored, it should call NdisMCoIndicateStatus with NDIS_STATUS_MEDIA_CONNECT. ]

#8


everandforever(Forever) :
     能否给点更详尽的描述?请问从那里可以得到2K的DDK?谢谢!

#9


IP_ADAPTER_INFO AdapterInfo[2] = {0};
DWORD dwBufLen = sizeof(AdapterInfo);
DWORD status = GetAdaptersInfo(AdapterInfo,&dwBufLen);

MIB_IFROW ifrow;
memset(&ifrow,0,sizeof(MIB_IFROW));
ifrow.dwIndex = AdapterInfo->Index;
PMIB_IFROW pIfRow(&ifrow);
GetIfEntry(&ifrow);

#10


elyta(卧姿伤痕地) 大哥:
    您所写的例程中需要用到的IPIfCons.h,Iphlpapi.h,Iphlpapi.libey及相应的DLL文件包含在SDK开发包中,请问从那里可下载这个开发包?

#11


Iphlpapi.h 的话直接include就好了。

但是如果要用到MIB_IFROW这个结构的话,还给再include "lm.h"和在编译选项中加"Netapi32.lib"。

#12


顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶

#13


用NotifyRouteChange监控一下事件,然后再用上面的方法判断事件。类型

#14


定时向网卡发送NCBENUM命令,以获取当前机器的网卡信息,

#15


请问如何向网卡发送NCBENUM命令呢?

#16


springzcq(冬天来了春天还会远吗) ( ) :
   您的意思是说调用用Netbios(PNCB pncb)吗?但函数只返回网卡号啊,并不能得到网卡的当前状态!

#17


我发现使用GetAdaptersInfo()函数得到的网卡信息并不正确,而且在98和2K下信息还有很大的不同。98下边IP地址与网卡的对应关系和适配器类型也不能正确分辨,PPP Adapter成了MIB_IF_TYPE_ETHERNET类型的网卡,真是怪事!