Файлы, проецируемые в память
Как уже говорилось выше, процесс не имеет возможности непосредственного доступа в собственное виртуальное адресное пространство другого процесса. Однако, на практике часто возникает необходимость в передаче данных между процессами. Для связи между процессами в Windows 95 и Windows NT реализован эффективный механизм проецирования файлов в виртуальную память.
Рассмотрим процедуру отображения файла на память. Прежде всего, приложение должно открыть файл с заданным именем при помощи функции CreateFile и получить идентификатор вновь созданного объекта ядра файл типа HANDLE. Затем следует создать еще один объект ядра – объект отображение файла. Объект отображение файла создается при помощи функции CreateFileMapping, которая возвращает идентификатор объекта типа HANDLE:
HANDLE CreateFileMapping(
HANDLE hFile, // идентификатор объекта ядра файл для отображения
LPSECURITY_ATTRIBUTES lpFileMappingAttributes, // указатель на атрибуты
// безопасности или NULL
82
DWORD flProtect, //атрибуты защиты для страниц отображения
DWORD dwMaximumSizeHigh, // размер файла (старшее слово)
DWORD dwMaximumSizeLow, // размер файла (младшее слово)
LPCTSTR lpName // имя отображаемого файла );
Имя отображаемого файла – это произвольная ASCIIZ-строка. Под этим именем отображенный файл будет известен другим процессам в системе. Далее следует отобразить файл на виртуальную память при помощи функции MapViewOfFile:
LPVOID MapViewOfFile(
HANDLE hFileMappingObject, // идентификатор объекта ядра отображение файла
предыдущаяследующая