aw27,
Thanks a lot, just got done reading and it cleared up a few things!

Some of the comments were scarier than the article... But thats probably because my idea of after-work fun is reading the Windows Internals book :P
So it seems basically 2 things are needed to pull this off:
1. The address of the beginning of the stack
2. The Dispatch ID of the func.
Using these 2 things, the kernel will call up the function and pass it the arguments. Only question I got now is, how is the return for the kernel function handled ie passing a return from the kernel func back to user mode? Or am I having a late-night brain fart and this isn't even necessary?
Thanks again! I feel like this info is pretty scarce, especially when compared to all the javascript stuff out now haha.