From what I understand from Windows internals stuff.  Any time you open a file regardless of how you do it, its implemented internally using memory-mapped files. File gets mapped to some pages in virtual memory, then it gets brought in by on-demand paging and some heuristics to do basic read-ahead, I imagine the paging file and on-demand paging of EXE/DLLs use the same mechanism.  But any kind of I/O APIs, like C's fread() or whatever, never issues I/O requests, you'll just get I/O requests if it touches some memory-mapped file and gets a page fault.