I had spent lots of time trying to searching for information last time when I tried to write a simple WinNT PCI device driver. However, at the end, I gave up searching but instead bought some books.
I would recommend "Developing Windows NT Device Drivers: A Programmer's Handbook" by Edward N. Dekker, Joseph M. Newcomer
and also the one from www.osr.com
I am definitely not an expect in device driver. However, as far as I know, most procedures are 'standard', especially when loading and unloading the device driver, searching for your own device etc. So, some 'cut-and-paste' would do. You may need some sort of resource allocate functions (the 1st book contains the code if i have not mistaken). Dynamic resource allocation is harder than static. So, if possible, use static allocation. Then if you will know all the memory locations before doing any read/write operations. The drawback is waste of resources.