9 Apr 1995

Making the Packet Driver Windows- Worthy

At this point, you have installed a Packet Driver. It may be a Naked Packet Driver that manages the Ethernet card directly, or it may be a Packet Driver built on top of Novell or NDIS. However, though any one of the three mechanisms, you now have something that acts as a Packet Driver and communicates through the selected software interrupt (usually 0x60).

The Packet Drivers were designed as DOS programs. They expect to move data between the Ethernet adapter and the first 640K of memory. A Windows program uses storage above the first megabyte, and any program that manages hardware on behalf of a Windows program needs to know how to mediate through the Windows memory manager. WINPKT is a program that can translate between the old DOS-only environment and the new Windows conventions.

WINPKT is a resident routine typically loaded by a statement in AUTOEXEC.BAT. It will be loaded after the Packet Driver is loaded and initialized, but before Windows starts up. The trick is that WINPKT "steals" the software interrupt that the Packet Driver is using (0x60 in the previous examples and by default). Any program that tries to call the Packet Driver ends up calling WINPKT instead. WINPKT then corrects any memory management problems before passing the request on to the real Packet Driver.

It is fairly easy to make a blanket statement such as "Load WINPKT at the end of AUTOEXEC just before calling WIN" or "Load WINPKT after all the other network related statements." These are accurate strategies, but they are not very precise and not fully informative. At the risk of beating the topic into the ground, consider all the Packet Driver configurations:

Naked Packet Drivers

A Naked Packet Driver is loaded in AUTOEXEC.BAT, so simply put the WINPKT call second.


The one parameter to WINPKT is the software interrupt, which should match the interrupt number used by the Packet Driver.

DIS_PKT (Not WFWG 3.11)

Before Windows for Workgroups 3.11, the DIS_PKT interface between NDIS and the Packet Driver clients is loaded from CONFIG.SYS with the statement:


The software interrupt that DIS_PKT will use (and therefore the parameter to be passed to WINPKT) is configured in PROTOCOL.INI in the statement:


The DIS_PKT driver is initialized (Bound) by a statement in AUTOEXEC.BAT. In Classic NDIS, the statement is a call to the NETBIND program. In later versions of the client programs or in WFWG 3.1, the binding occurs during a "NET START" program (that might be followed by one or more LOAD statements). Therefore, WINPKT should be added after NETBIND or NET START (and any trailing LOADs) as in:




Windows for Workgroups 3.11 is misleading. The network configuration is performed in SYSTEM.INI and \WINDOWS\PROTOCOL.INI. CONFIG.SYS has a dummy driver, and AUTOEXEC has only a "NET START" command. However, the NET START checks to see if there are any 16-bit Ethernet drivers or if there are any 16-bit Real Mode protocols. DIS_PKT is a 16-bit protocol, so it must be loaded according to the old rules.

Therefore, during the execution of the NET START command, WFWG 3.11 loads something that can act as a real mode PROTMAN. It also loads a real mode driver (or substitute driver) for the Ethernet card. It then loads DIS_PKT and binds it to the Ethernet driver.

The WINPKT statement simply follows NET START. Assuming that INTVEC=0x60 is coded in the [PKTDRV] section of PROTOCOL.INI, the sequence would be:


Testing WINPKT

After the WINPKT statement is coded, the system should be rebooted. As before, the Packet Driver will report that it is initialized. However, WINPKT will now report that it has found the Packet Driver and has remapped the 0x60 interrupt vector (to 0x61).

Continue Back PCLT

Copyright 1995 PC Lube and Tune -- Windows on the World -- H. Gilbert