--------------------------------------------------------------------------------
                             EliCZ's Device Driver
                                Development Kit

                         "Become part of Windows core!"
 
                              Edition: Preliminary
--------------------------------------------------------------------------------
What is it?
-----------
EDK should help you in developing ExDs.
ExD is EliCZ's Device Driver, an executable containing 32bit FLAT code and data,
running at ring-0 of Microsoft Windows 95 or Microsoft Windows 98. Running at
ring-0 means that everything is allowed. VxD services (VCALLs) can be used too!
ExD is typically a short program, written in assembly language, which usually
provides some system low-level functions.

Advantages (vs. loadable VxD)
-----------------------------
Smaller file size, very easy to make - "write and run", autoloading,
not detectable, invisible for system.

Disadvantages
-------------
Not detectable, invisible for system, illegal(=not supported by OS), not defined
communication between ring-3 and ring-0 (something like DeviceIoControl).
That's why you should use it for your experiments only.
--------------------------------------------------------------------------------
Tools
-----
Assembler:
Includes and examples are designed for Borland Turbo Assembler v4.0 and higher.
I use TASM 4.1 because 5.0 crashes when translates BSF or BSR instruction and
SEG?S directives.

Linkers:
DOS  -It's needed only for linking ExDLdr and Nonresident ExDs. Use your 
      favourite linker. I recommend Borland Turbo Linker (tlink.exe) or old
      Symantec Linker (link386.exe, will be maybe available on http://members.
      xoom.com/Zenix).

FLAT -Use DLINK v2.00 beta, 32bit OMF linker for DOS32 dos-extender (c) by Adam
      Seychell. (On file offset 7A50 replace AA with 00 to produce "registered"
      image).

NonResident ExDs
----------------
Nonresident ExD is simplier variant. Nothing special is required. Those ExDs
are mostly compatible with Microsoft Windows 3.x (it depends on used VCALLs).
Tools required: assembler, DOSlinker
Template: in NonResid folder
Make: 1) In Template place VCALLs you need
      2) Assemble and DOSLink it

Resident ExDs
-------------
Those ExDs are not compatible with Microsoft Windows 3.x.
Tools required: assembler, DOSlinker, FLATlinker
Template: in Resident folder
Make: Write    YourExD
      Assemble YourExD
      DLINK   -SExDLdr YourExD
--------------------------------------------------------------------------------
Information about VCALLs, structures, constants, ..
---------------------------------------------------
Microsoft Developer Network Library contains information about VCALLs and
few structures, but doesn't contain any hex value (only names of constants).

Calling conventions of VCALLs and their parameters are sometimes similar as
for Win32 API (e.g. Registry VCALLs) so you can use values of constants, number
of parameters from C++ include files. Function can be sometimes a bit different
(e.g. core _lmemcpy is forward only , kernel32 _lmemcpy is "bidirectional").

You need WinICE to trace VCALLs to see values of constants and what they really
do. (command examples: VCALL VDD*, u Simulate_IO, bpx _HeapFree, etc..) 

Obtaining VCALL numbers: I've prepared VCALL.inc
(You can find them in Interrupt List too.)
--------------------------------------------------------------------------------
Reference
---------
DLINK (Adam Seychell, dos32b35.zip, everywhere on Internet - use FTP Search)
MSDN  (Microsoft, on CD or online at http://www.microsoft.com/msdn/)

DOSVxD (EliCZ, filter#5, http://www.suddendischarge.com)
VxD Monitor (Cogswell & Russinowich, vxdmon.zip, ?) - VCALLs hooking!
VxD Viewer  (Vireo Software, vxdview.zip, http://www.vireo.com)
Monitor (Vireo Software, monitor.zip, http://www.vireo.com) - it hears DOSVxD

Perspective
-----------
1 year left, then .SYSs will rule. Look for DDK for NT. To make EDK for NT is
impossible. 
--------------------------------------------------------------------------------