kobe9
驱动牛犊
驱动牛犊
  • 注册日期2007-01-27
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分3分
  • 威望25点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
阅读:1360回复:1

Hook了TCPIP_WANARP后,如何判断ADSL拨号已连接上

楼主#
更多 发布于:2007-11-09 21:55
起初以为ADSL拨号像启用本地连接一样会调用BindAdapterHandle,但是Hook了TCPIP_WANARP协议的BindAdapterHandle和UnbindAdapterHandle等中的函数后并下断点,当拨号和断开都没有调用这些函数?我的猜测是是否是Tcpip和TCPIP_WANARP都绑定到同一块物理网卡上,所以当本地连接已连接上时,在通过ADSL拨号不会重新绑定?还是因为实际TCPIP_WANARP先绑定到由RASPPPOE虚拟出的ADAPTER上了,所以拨号时只有RASPPPOE需要调用BindAdapterHandle?这点不是很理解,希望有人给予解答。
另外,在Hook了TCPIP_WANARP后,判断ADSL是否连接上,我想到一种比较笨的方法是判断如果TCPIP_WANARP中的PtReceive中接受到数据包,从而得到ADSL拨号连接上,并通过分析接受到的数据包来得到IP等信息。但是有没有好的判断方法,并能得到IP、掩码等信息(和通过ipconfig /all得到的信息一样)?
kobe9
驱动牛犊
驱动牛犊
  • 注册日期2007-01-27
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分3分
  • 威望25点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2007-11-11 18:29
自己的问题自己回答了
在DDK文档中找到ProtocolStatus可以判断adsl连接上,在该函数中的参数GeneralStatus == NDIS_STATUS_WAN_LINE_UP,StatusBuffer是一个PNDIS_WAN_LINE_UP其中有连接的信息。但是ProtocolBindingContext中的内容不理解是什么?希望牛人来解答!!!!!!!!!!!!!!!!!谢谢。它不像其它的例程中的ProtocolBindingContext是一个地址,其中包含一些结构。
另外,通过测试发现。在adsl拨上之前,TCPIP_WANARP已经绑定了Device\NDISWANIP这可能就是为什么在拨上和断开时不调用Bind、Unbind的原因了。
游客

返回顶部