I suspect this needs to move into the implementation of CFileIO::write/read (and might solve the intercept problem).

That may cause issues - because CFileIO is thread safe and reentrant.  That might mean you always have to flush and wait after each write.  @richardkchapman might have some bright ideas to work around that issue.