I work on a VPN client that runs on Vista. We are a TDI filter (yes, I know
TDI is going away post-Vista) and we also have a virtual network adapter.
The problem I am having is that when my VPN client is loaded, Vista's NLA
claims that the machine is not connected to the Internet. The globe is
missing from the network icon in the taskbar notification area, Network and
Sharing Center shows a red X in the diagram in the connection to the
Internet, and INetworkListManager::get_IsConnectedToInternet returns FALSE.
This is more than just a cosmetic issue as apparently Google Desktop's News
gadget on Vista relies on NLA indicating Internet connectivity in order to
retrieve news headlines from the Internet.
If my virtual network adapter signals a media disconnect to NDIS, then NLA
thinks that the machine is connected to the Internet (via the physical
adapter). When my virtual network adapter once again signals a media connect
to NDIS, NLA thinks that we are no longer connected to the Internet, even
though the system can access the Internet just fine through our VPN via IE,
ping, etc.
My question is, how does INetworkListManager and/or NLASVC detect Internet
connectivity? When my adapter indicates media connected, I see ARP and DHCP
requests to my virtual adapter but we handle these and answer them
successfully, just like what happens with the real physical adapter. And I
don't see requests for any OIDs when my virtual adapter connects, at least
not for any that we say we support. Is there a new OID or NDIS request or
other such API that I need to handle? Any help would be greatly appreciated!
Thanks.