Selected Device Driver Projects

Please pardon our dust as we redesign this site.  We realize that some links will be broken and some content is incomplete, but we expect to have this cleaned up in the near future.  The Mgmt.
 

Here's a sampling of the NT drivers, VxDs, Win32 DLLs, and peripheral interfaces that we've done, grouped by operating system:  (Current through 1996)



Windows NT
Class Driver for Parallel Ports (~8000 lines/code):

Parallel-port peripherals such as disks, tapes, dongles and network adaptors must use a Class Driver to layer over the hardware port driver, allowing them to share the port hardware. In our class driver, each port's shared hardware device was virtualized so that multiple user applications could simultaneously access the device.

We had to queue and serialize IRPs, provide clean dequeueing at shutdown, and implement threaded driver state logic. The driver had to work on MultiProcessor systems, and used Service Manager installation tools.

While the prototype was being developed on beta WinNT 3.0, we worked closely with Microsoft engineers to identify OS design issues and problems. The driver was eventually moved, unaltered, to versions 3.51 and 4.0 Windows NT.

Shared Parallel-Port VDD for 16-bit WOW (~600 lines/code):

Under Windows NT, 16-bit DOS and Windows applications cannot directly access custom hardware devices; a Virtual Device Driver (VDD) must be written to intercept legacy application calls to a parallel port device, convert the calls to Win32 driver calls, and finally return driver data to the legacy app.

Our VDD allowed such applications, running unmodified under WinNT's WOW emulation system, to access shared parallel-port devices. We had to work around Microsoft's stand that WOW was not meant for intercepting "non-standard" hardware, but only for simulating commonly found PC peripherals. This required lots of reverse-engineering of the WOW components; ironically, the fix required only a few lines of code.

Remote Parallel-Port LAN Service: (~2100 lines/code)

For accessing shared parallel-port devices over the LAN, we developed a Windows NT Service (similar to a unix daemon). The service module listens for incoming connections, then spawns worker threads to process simultaneous LAN sessions with our parallel-port device. Integration with NT's Service Manager allows automatic starting and stopping of the Service, including its underlying device driver.

QIC117 Tape Drive Compression Filter: (~1300 lines/code)

This was an R&D project for adding LZW compression/decompression to the Windows NT QIC117 tape driver stack. Although it was cancelled when Unisys began licensing the LZW patents, we had reverse-engineered most of the QIC drivers and had a working filter layer in place.

[TOP OF PAGE]   [DRIVERS TAB PAGE]   [HOME PAGE]


Windows 95
Sharable Parallel Port VxD(~8000 lines/code):

Parallel-port peripherals such as disks, tapes, dongles and network adaptors must use port arbitration services provided by VCOMM.VXD and indirectly by LPT.VXD, to share port hardware cooperatively. Our VxD also had to virtualize the device on the shared port so that multiple- user applications could simultaneously access the device.

So that we could maintain a common code base, we wrote Win95 emulation functions for many of the WinNT kernel services used in our code. Because the standard Win32 API for talking to devices didn't work correctly under Win95, we had to reverse-engineer the relevant VMM code to find a workaround. We also had to reverse-engineer the LPT.VXD port sharing mechanisms, since the docs were either wrong or were silent regarding stealing and releasing the hardware port. We found ways to obtain long time delays in a VxD without blocking the system, ways to emulate NT's File Object functionality, and ways to minimize our VxD resource footprint.

While the prototype was being developed on beta Win95, we tried to work with Microsoft engineers to solve OS design issues and problems. Unlike the WinNT folks, the Win95 engineers were short on cooperation, obliging us to spend as much time disassembling Win95 as we did writing our VxD. The result, however, was a stable, robust driver!

Network Sharable PP Access Service(~1300 lines/code):

For accessing shared parallel-port devices over the LAN, we developed a Windows95 Service (similar to a unix daemon). The service module listens for incoming connections, then spawns worker threads to process simultaneous LAN sessions with our parallel-port device.

Replacement LPT.VXD Driver(~1800 lines/code):

Because the LPT VxD shipped with Win95 fails to share the hardware ports by ignoring Microsoft's own rules, we had to reverse-engineer large portions of the VxD so we could produce a working LPT.VXD that shared the port cooperatively with other VxDs. (With the release of Win95 OSR2, the included LPT VxD solves most of the sharing problems, and we ship this VxD instead of our own hacked LPT.VXD.)

DirectX Graphics Driver for Java(~1000 lines/code):

As part of our Kiosk Authoring and Runtime System (KARS) project, we developed a very high performance Java graphics package that uses DirectX for logical access to the display hardware. We are considering adding a DirectSound Java class package.

VxD for Reading Non-standard Floppy Disks:

Although we primarily develop drivers, sometimes we're called upon to salvage marginal driver designs. In this case, we reviewed the VxD code written by a client and found 20 significant problems, the worst of which was that their time delay loop set and cleared hardware interrupts arbitrarily, rather than restoring the existing interrupt state. Also, the OS and the client's VxD commingled access to the FDC, which scrambled data. Likewise, the VDMAD was not shared properly, and the VxD was not properly detecting reentrant calls caused by FDC timeouts.

We helped them implement a robust VxD that hooked the VFD.386 services to monitor OS activity, created a BUSY semaphore to prevent deadlock in accessing FDC.386 services, added a robust time-delay mechanism, and fixed VDMAD and VIRQ problems.

[TOP OF PAGE]   [DRIVERS TAB PAGE]   [HOME PAGE]


DOS/Windows 3.x
Sharable Parallel Port VxD:

Because Windows 3.x used VPD.VXD to control parallel port sharing, we wrote a VxD to interact with VPD so that our applications could talk with a parallel-port device even when the printer was using the port.

DOS-VM to Win16 App Communications VxD:

A DOS-extended multitasking program had to communicate with a 16-bit windows application, transferring data in both directions at high speed. We developed a VxD and the corresponding TSR and DLL needed by each application to allow blocking I/O between them. We used shared buffer pools to maximize performance, assembly language to minimize size, and C to implement the APIs.

Realtime Kernel w/threads VxD

To improve the multi-tasking capabilities and realtime performance of an extended-DOS application, we wrote a VxD to implement some of these critical functions for the app.

DOS Device Drivers for Multimedia Kiosk Peripherals

A DOS-based kiosk system used for fast-food customer ordering terminals, employee transaction terminals (cash registers), and hand-held ordering terminals required drivers for various peripherals, including touch screen, Sound Blaster WAV device, MPEG video playback system, laser videodisk, swipe card readers, and telnet emulation to unix backoffice systems. Some middleware was required between the Kiosk app and the device drivers to wrap specific customer business practices.

Sundry DOS Device Drivers for Banking Peripherals

A DOS-based kiosk system used to implement Automated-Teller and Customer-Information systems for a world-wide banking systems company required drivers for receipt statement printers, passbook printers, swipe card and mag card readers, a PIN keypad using DES, a cash dispenser using DES, a touch screen, various security devices, and a 3270 emulator.

[TOP OF PAGE]   [DRIVERS TAB PAGE]   [HOME PAGE]


Others
OS/2 wrappers for multitasking device drivers:



CDC-6400 Data Channel Interface with Drivers:



[TOP OF PAGE]   [DRIVERS TAB PAGE]   [HOME PAGE]

© 1997 ATG Laboratories
Most recent revision was: March 5, 1997
This web site is administered by:
Webmeister Jerry Schneider

Java is a trademark of Sunsoft. Windows is a trademark of Microsoft.
ATGLABS, KARS, and WEBLOK are trademarks of ATG Laboratories.