Hooking a (Win)API functions is a general solution for such tasks but I suppose this is just a tip of the iceberg. There is little note about it in wiki (Detection subsection). Thus, you need to learn about how to hook API functions and about Windows internals in general. I would suggest Windows via C++ as a good start point for solving this global problem.
Jeffrey Richter's book Windows via C/C++ is a good one. It goes over way more than just Windows Services though.
If you have Visual Studio Pro (or Visual C++ Express), you can dig into the ATL classes around CAtlServiceModuleT. While it is mostly about exposing DCOM interfaces, I've used those classes to write stand-alone Win32 services.
There is also this (old) article on MSDN.
IOCP is a feature that has been in Windows since the dark ages and has changed little in years since. As such, any samples etc. from 5+ years ago should still work pretty well today.
MSDN has some documentation on IOCP:
Mark Russinovich also wrote up a great intro into IOCP:
Mark also wrote a more thorough description of Windows' IO infrastructure in "Windows Internals" which is essential reading.
I also strongly recommend Jeffery Richter's "Windows via C/C++" which is also essential reading for anyone embarking on lower-level Windows programming.