The following sample virtual device drivers (VxDs) are included with the
VxDWriter
tool kit. You can download some of these sample device drivers (VxD) from
here. Note that you need the full version of the VxDWriter 2.0 package to
compile these samples, and can't use the demo version of VxDWriter 2.0 to
compile them.
Sample VxDs written in "C"
|
VxD
|
Description
|
|
APCall.VxD
|
This sample illustrates the use of asynchronous procedure
call (APC) to communicate with a ring3 application from VxD.
|
|
DbgTerm.VxD
|
This VxD shows how to hook VxD services
that uses registers for passing parameters. It is used by the DbgTerm
application
to intercepts debug outputs from other VxDs.
|
|
Event.VxD
|
This event sample VxD demonstrates, (a) how to schedule
and handle global events, and (b) how to implement the "dot" command, i.e.,
debugging services, in your VxD to help debugging.
|
|
Generic.VxD
|
This is a generic skeleton VxD that supports V86 APIs,
PM APIs, Win32 device I/O control APIs, and VxD service table interface for
VxD to VxD communication.
|
|
KbdFiltr.VxD
|
This VxD demonstrates how to write a keyboard
filter driver. It prints the scan codes on debug terminal, as well as swaps the
DEL
and INS keys on the keyboard.
|
|
LoadVxD.VxD
|
This sample shows how to load another dynamic
VxD, which does not have a unique device ID, call the service(s) of the loaded
VxD,
and then unload it from the memory.
|
|
MapPhys.VxD
|
This VxD demonstrates mapping of physical
address to linear address, which can be accessed by the ring3 application
programs.
|
|
Moushook.VxD
|
This VxD demonstrates how to hook and manipulate
mouse pointer messages and install hot keys. You can reverse the mouse axis and
change the
sensitivity with this VxD through hot keys.
|
|
NdisProt.VxD
|
It is a skeleton NDIS protocol driver. It binds
to the first adapter found on the system, and sets it in promiscuous mode. It
will
then display the source and destination address of all IP packets received by
the
adapter on the debug terminal. For a more complete sample, see the "PACKET"
driver
in the DDK.
|
|
Vitd.VxD
|
This VxD provides a simulation of a hardware
interval timer for virtual machines. It is the same VITD VxD that is provided
with the DDK, but rewritten in "C" to demonstrate the use of VxDWriter library.
|
|
VMIrqd.VxD
|
This VxD demonstrates the virtualization of
a hardware interrupt (IRQ). It will attempt to virtualize the IRQ 9 in share
mode.
The hardware interrupt handler does nothing and passes the interrupt to the
next
handler for processing.
|
|
VxDInt.VxD
|
This VxD shows how to simulate interrupt in
V86 mode. It implements a Win32 device IOCTL API to read physical sectors of
the
disks from the application programs.
|
Sample VxDs written in C++
|
VxD
|
Description
|
|
APCall.VxD
|
This sample demonstrates how to use asynchronous procedure
call (APC) to communicate with a ring3 application.
|
|
AppyTime.VxD
|
This AppyTime sample demonstrates how the use the
application-time event to load a 32-bit DLL and call its API from VxD.
|
|
AsyncIO.VxD
|
This sample shows how to process asynchronous I/O.
This sample is similar to Asyncw32 sample in the DDK but written in C++.
For demonstration, it processes I/O requests in idle-time handler.
|
|
FCrypt.VxD
|
This sample demonstrates how to implement simple real-time
file system encryption driver using IFS file system hook function. For
simplicity,
encryption/decryption is done with 1's complement, and it works on a single
byte
at a time.
|
|
FileHook.VxD
|
This is a basic file I/O hook sample. It displays the I/O
request name and corresponding file name on debug device and passes the I/O
request to the previous IFS hooker. This sample may be ideal for starting your
own file I/O hooker device.
|
|
Generic.VxD
|
This is a generic skeleton VxD written in C++ that supports
V86 APIs, PM APIs, Win32 device I/O control APIs, and VxD service class
interface
for VxD to VxD communication.
|
|
IntMon.VxD
|
This VxD demonstrates how to install a V86 mode interrupt
hook. It hooks both INT 21h and INT 1Ah, and displays the register contents on
the debug terminal both before and after processing the interrupts.
|
|
LoadVxD.VxD
|
This VxD demonstrates how to load another dynamic VxD and
obtain its device service class object. It loads the Generic.vxd, and then
calls
its VxD service through device service class object. It also demonstrates the
use
of DeviceIoControl functon to call Win32 device I/O control API of Generic VxD.
|
|
MousHook.VxD
|
This VxD demonstrates how to hook and manipulate mouse pointer
messages and install hot keys. You can reverse the mouse axis and change the
sensitivity with this VxD through hot keys.
|
|
PMFault.VxD
|
This VxD demonstrates how to hook protected mode faults. It
hooks four PM faults, and the name of the application and its register contents
are displayed on the debug terminal on encountering a fault that is hooked.
|
|
RealInit.VxD
|
This VxD demonstrates how to use real-mode initialization code
in VxD. It also demonstrates how to call assembly language function from the
VxD.
|
|
Timer.VxD
|
This sample demonstrates how to install a periodic callback
function in your VxD. It uses
CTimer
class to install a timer callback function.
|
|
Vitd.VxD
|
This VxD provides a simulation of a hardware interval timer
for virtual machines. It is the same VITD VxD that is provided with the DDK,
but
rewritten in C++ to demonstrate the use of
VFCL
.
|
|
Vkxd.VxD
|
This VxD is the same as VKXD.VxD of DDK in functionality,
but rewritten in C++ using
VFCL
. It converts F12 key into Alt+Enter key
combination. So, you can use F12 key to toggle DOS applications between
full-screen and Windowed mode.
|
|
VMIOD.VxD
|
This VxD displays data going in and out of a specified I/O
port on the debug terminal. It traps port 32h for demonstration.
|
|
VMIrqd.VxD
|
This VxD demonstrates the virtualizing of a hardware interrupt
(IRQ). It will attempt to virtualize the IRQ 9 in share mode. The hardware
interrupt
handler does nothing and passes the interrupt to the next handler for
processing.
Note that it works only for the unvirtualized or shared IRQs. This VxD is
similar
to VMIRQD.VxD provided with the DDK, but written in C++ for demonstration.
|
|
VNmid.VxD
|
This VxD shows how to hook the NMI (Non-maskable interrupt).
It currently does not actually DO anything with the NMI except to chain to the
previous handler.
|