What are the differences between NDIS 3.0 and 3.1?

From the Windows NT network documentation: From a NIC driver perspective, there is no difference between a well written NDIS 3.0 driver and an NDIS 3.1 driver for Windows 95. Sources from a driver compiled to run under Windows for Workgroups 3.11 can simply be recompiled under the Windows 95 DDK to take advantage of NDIS 3.1 functionality. There are no new driver functions in NDIS 3.1.

NDIS 3.1 means the following for Windows 95:

If your NDIS 3.0 NIC driver uses standard macro definitions from the samples, these macros have been redefined to fit the NDIS 3.1 dynamic loading/unloading scenario.

You should make all noncritical code pageable (typically INIT and removal/unload code).

In NDIS 3.0, the protocol loads first, and all adapters are bound to the protocols. In Windows 95, the adapter is detected and opened by the Configuration Manager and the NDIS interface library (wrapper) first, and protocols are bound to the available adapters. As a result, NdisOpenAdapter is no longer called from within NdisAddAdapter, so you should ensure no local variables are used to pass data between these two functions.