NDIS protocol driver stops working after windows update from 8 to 8.1

Hello all,

I am having NDIS USB WIFI driver and one NDIS protocol driver. Both of these drivers works fine on windows 8.

After updating the operating system windows from 8 to 8.1 it is observed that the NDIS protocol driver does not get attach into the NDIS device stack i.e. it is not visible in “Local Area Connection Properties” dialog.

My NDIS protocol driver is a general purpose filter used only for communication between application and NDIS USB driver.

Please give me some direction to check what changes windows 8.1 having related to NDIS USB device stack.

Thank you in advance for help.

The first thing that comes to mind is that Windows 8.1 no longer supports non-native WIFI miniport drivers. That is, Windows 8.1 does not support a WIFI miniport whose NDIS version is less than 6.0. All 6.0 and later wireless drivers continue to be supported.

If that isn’t the case, then here are some things to check:

What NDIS versions are the WIFI driver and the protocol drivers?

What’s the UpperRange/LowerRange from the WIFI driver’s INF file? Example:
HKR, Ndi\Interfaces, UpperRange, 0, “ndis5”
HKR, Ndi\Interfaces, LowerRange, 0, “ethernet”

What’s the LowerRange from the protocol driver’s INF file? Example:
HKR, Ndi\Interfaces, LowerRange, 0, “ndis5”

Does the protocol driver have any NotifyObject? I.e., does the protocol’s INF have a ClsID section?
HKR, Ndi, ClsID, 0, {ee6cd6fc-a32b-4a26-8a1c-dbc97988ad7a}
HKR, Ndi, ComponentDll, , mux.dll

How is the protocol installed? SetupCopyOEMInf + INetCfgClassSetup::Install?

What’s the output of !ndiskd.miniport on the WIFI driver? Please use the debugging tools from the 8.1 WDK, as that version of ndiskd will display substantially more information about bindings.

What’s the output of !ndiskd.protocol?

> After updating the operating system windows from 8 to 8.1 it is observed that the NDIS protocol driver does not get attach into the NDIS > device stack i.e. it is not visible in “Local Area Connection Properties” dialog.

Are you saying that you start with a Win8 system with your NetTrans protocol installed, upgrade that system to Win8.1, and now the protocol is no longer installed?

Or are you saying that if you install your software on a Win8.1 system that the protocol does not install?

How does your protocol normally get installed on a system?

Can you re-install the protocol after upgrade?

Good Luck,
Dave Cattley

Hello,

Firstly thanks a lot for your valuable comments.

Answers to [Jeffrey Tippet] questions:-

1] What NDIS versions are the WIFI driver and the protocol drivers?
Ans: For WIFI driver NDIS major version 6.0 and minor version 20.
For Protocol driver NDIS major version 6.0 and minor version 0.

2]What’s the UpperRange/LowerRange from the WIFI driver’s INF file?
Ans: HKR, Ndi\Interfaces, UpperRange, 0, “ndis5”
HKR, Ndi\Interfaces, LowerRange, 0, “wlan,ethernet,vwifi”

3]What’s the LowerRange from the protocol driver’s INF file?
Ans: HKR,Ndi\Interfaces, UpperRange, noupper
HKR,“Ndi\Interfaces”,“LowerRange”,“ndis5,ndis4,ndis5_prot”

4]Does the protocol driver have any NotifyObject? I.e., does the protocol’s INF have a ClsID section?
Ans: No we dont have any ClsID section in protocol’s INF file.

5]How is the protocol installed? SetupCopyOEMInf + INetCfgClassSetup::Install?
Ans: Yes, protocol driver gets installed using SetupCopyOEMInf + INetCfgClassSetup::Install

6]What is the output of !ndiskd.protocol?
Ans: I didnt get how to execute this command. I am trying this once i get it, i will post this output.

Answers to [David R. Cattley] questions:-

1] Are you saying that you start with a Win8 system with your NetTrans protocol installed, upgrade that system to Win8.1, and now the protocol is no longer installed?
Ans: Yes exactly like this.

2] Or are you saying that if you install your software on a Win8.1 system that the protocol does not install?
Ans: If I install protocol driver directly on Win8.1, it works fine.

3] How does your protocol normally get installed on a system?
Ans: The protocol driver gets installed using SetupCopyOEMInf + INetCfgClassSetup::Install

4]Can you re-install the protocol after upgrade?
Ans: If I re-install the protocol driver after upgrade then also it works fine. My question is that why its not getting bind to NDIS device stack automatically after windows upgrade from 8 to 8.1?

Please give me some direction to look at this issue. Thank in advance.

>My question is that why its not getting bind to NDIS device stack automatically after windows upgrade from 8 to 8.1?

I believe you have too just discovered a bit of design behavior of Windows Setup and how it handles third-party NetTrans/NetService/NetClient components. It basically kicks them out during upgrade.

A big fat warning during the online setup/upgrade from Win8->Win8.1 if it detected third-party components about to be evicted would have been nice.

But alas, not so.

While this may not have been anything we noticed from Win2K->XP, XP->Vista, Vista->Win7, Win7->Win8 because frankly, what enterprise (or user with enterprise software) actually did in-place upgrades? With Win8->Win8.1 the story is quite different since it might be expected that this was going to be as smooth as installing a service pack.

So your application needs to figure out that it survived the upgrade but that its NetTrans component did not and re-install it.

Look on the bright side: At least you can re-install the NetTrans post upgrade and it works!

Good Luck,
Dave Cattley

On 29-Oct-2013 21:07, Dave Cattley wrote:

A big fat warning during the online setup/upgrade from Win8->Win8.1 if
it detected third-party components about to be evicted would have been nice.

But alas, not so.

So will there be a KB article, at least?
–pa

> So will there be a KB article, at least?

I know only of http://support.microsoft.com/kb/2898464 which frankly says nearly nothing in technical detail and applies only to the IM driver case where WinSetup flubs the upper-edge root enumerated IM driver miniports on upgrade.

As for the behavior of evicting NetXxxx class components from NetCfg during upgrade, I’m not sure where that is ‘documented’.

Maybe it will be more clearly explained soon.

Cheers,
Dave Cattley

Hi,

Thanks David for your comments.

I have tried to debug this issue on my Upgraded Win 8.1 system and found that the DriverEntry function for my protocol driver gets called successfully.

In DriverEntry all the other functions like “IoCreateDevice” “IoCreateSymbolicLink” and “NdisRegisterProtocolDriver” also gets successfully completed.

But still after that this protocol driver entry is missing from the list of NDIS protocol driver list i.e. from in “Local Area Connection Properties” dialog.

An NDIS protocol driver gets registered with two databases: the SCM driver service database and the NetCfg network driver database. SCM is responsible for starting the driver, and NetCfg is responsible for creating bindings to NICs. (These separate databases are also why installation requires two steps: SetupCopyOEMInf and INetCfgClassSetup::Install – one step for each database.)

Windows migrates the SCM driver database during an OS upgrade, but does not migrate the NetCfg network driver database during an OS upgrade. Therefore, after an OS upgrade, you will see that the driver is still registered with SCM, and still gets its DriverEntry called, but NDIS won’t attempt to bind your protocol to any NICs.

This is not specific to your driver; it’s true of all NDIS protocol drivers. The best workaround is to have your usermode app detect that the driver got uninstalled, and to call INetCfgClassSetup::Install again.

Thank you very much Jeffrey. It is very important information.