Отображение файлов в память
Самый главный вопрос - это зачем нужно отображать файлы на память ? Ведь есть виртуальная память до 2 ГБ. Одна из причин это обеспечение работы с файлами большего размера. Второе преимущество при работе с большими файлами, что память не выделяется, а резервируется и при обращении к ней происходит подгрузка из файла. Этот механизм используется операционной системой, например, при работе с DLL.
Сначала файл открывается с помощью CreateFile(), и если открытие прошло успешно, то идентификатором файла можно воспользоваться для создания отображенного файла CreateFileMapping(), после которой мы получим идентификатор отраженного файла, на основе которого мы можем проецировать файл в память с помощью функции MapViewOfFile(). Эта функция даст нам указатель LPVOID, который используется для последующих операций, в том числе и по отмене проецированного файла UnmapViewOfFile() или принудительной записи на диск FlushViewOfFile(). В том случае, если с отображенным файлом будут работать несколько приложений одно приложение создает файл проецированный на память CreateFileMaping(), а остальные открывают эту проекцию OpenFileMapping().