As for what's required, you need to d/l one of the Microsoft Windows Driver Development Kits at
http://www.microsoft.com/ddk/
I guess you can accomplish this with an NT/XP/2000 driver as well, but for Win98 you can get the necessary DDK components at
http://www.microsoft.com/ddk/install98ddk.asp#Segments
The full install is 25.8Mb, but I think you can get away with just the following two. What is needed are the Include files and the file Other.chm:
http://www.microsoft.com/ddk/download/98/98SETUP.EXE
3.4Mb
http://www.microsoft.com/ddk/download/98/OTHER.EXE
3.7Mb
As for what you want to write it in, I use MASM v.7, but there is a tool called VxDWriter which you can use to write it in C/C++. Other docs include
Iczelion's vxd writing tutorials
http://spiff.tripnet.se/~iczelion/tutorials.html
[Yates] - a set of 3 vxd tutorials, I won't insult anyone by not assuming they can't search for these
Also, d/l the Virtual Machine Manager Services (VMM) Help file that I uploaded in a previous vxd mini-project. This isn't a replacement for the DDK file other.chm, but it does contain some of the same info:
http://www.woodmann.net/forum/showthread.php?threadid=1915
Heh, that mini-project may not have gone anywhere, but the hard-to-find VMM help file was downloaded 298 times, lol! I wonder sometimes if people hoard everything they can get their hands on just for the sake of it...
One more thing, about what I said about the disassembly of msisys.vxd not showing which service was hooked, in retrospect "duh, of course not!"
This is because
GetVxDServiceOrdinal eax, Service
is a macro, defined in vmm.inc. So if you code in the name of the Service to be hooked, it is compiled as a ServiceOrdinal value, any name information disappears. The high word of the ServiceOrdinal is the VxD ID and the low word is the service number.
For the record, the call that was hooked by msisys.vxd was VMMcall Log_Fault_Call_Out. Check out the VMMCall list compiled by Daemon for a quick way to find out unknown VMM service numbers:
http://www.anticrack.de/daemon/VMMCalls.txt
That's about it for now I guess. I don't think there's really any "project" here yet, just throwing out some ideas along the lines of a system monitoring tool of some kind, or general vxd coding or whatever. It's pretty well open to suggestions or whatever direction people might take it. I'm working on a very basic implementation of a hook right now which will trigger when a dynamically loaded driver is loaded (hooking VMM_Add_DDB). If I get it working I'll up the source as a template, the hook can be replaced with any other.
What's important I guess is what you do *with* the hook. Other than making the actual hook and/or informing the user, I haven't really thought that far ahead yet, lol.
Kayaker