NDIS 2 Keyword Compatibility

Windows 95 NDIS 3.1 drivers and miniports should be keyword compatible with existing equivalent NDIS 2 drivers. This is a change from the Windows NT model that is required for backwards compatibility with real mode (NDIS 2) drivers that may be running on the same Windows 95 computer.

In the Windows 95 model, it is possible to use two different keywords to refer to the same value (because the NDIS 2 keywords are written to the Protocol.ini, and the NDIS 3.1 keywords will be written to the registry). In practice, this should be avoided if possible, and (for purposes of maintaining compatibility with Windows NT NDIS miniport keywords) should only be used for the four resource types maintained by the system (InterruptNumber, IoBaseAddress, MemoryBaseAddress, and DMAChannel). In any case where the keywords are different, the values the keyword may take must be the same for both drivers.

Example from NETEE16..inf:

  ; Resources
  HKR,,InterruptNumber,1,04,00,00,00        
  HKR,NDI\params\InterruptNumber,resc,1,04,00,00,00
  HKR,NDI\params\InterruptNumber,ParamDesc,,"Interrupt Level"
  HKR,NDI\params\InterruptNumber,flag,1,20,00,00,00    ; 0x20 = NDIS 3.1 only
  ;ndis2
  HKR,NDI\params\ IRQ,resc,1,04,00,00,00
  HKR,Ndi\params\ IRQ,ParamDesc,,"Interrupt Level"
  HKR,NDI\params\ IRQ,flag,1,10,00,00,00      ; 0x10 = NDIS 2 only
 

In this example, the resource is tied to the keyword InterruptNumber, which shows up only in the registry. The keyword IRQ will get written to the Protocol.ini. This sample would not work if the values for each keyword were different (for example, one looks for a hexadecimal number, the other looks for a string).

It is possible for either driver to have different, unique keywords (such as MAXMULTICAST), as long as this keyword is explicitly tagged as being NDIS 2 or NDIS 3.1 only.