HANDLE CreateFileMapping (
HANDLE hFile, // дескриптор отображаемого файла
LPSECURITI_ATTRIBUTES pAttr, // необязательные атрибуты безопасности
DWORD flProtect, //защита для объекта отображения
DWORD dwMaxHigh, //старшие 32 бита размера объекта
DWORD dwMaxLow, // младшие 32 бита размера объекта
LPSTR lpName); //имя объекта отображения
Первый параметр содержит дескриптор файла, который требуется отобразить в память. Этот дескриптор может быть получен функцией CreateFile().
Второй обычно равен NULL для установления набора атрибутов безопасности по умолчанию.
Третий параметр может принимать один из следующих значений:
PAGE_READONLY – передаваемая часть файла доступна только для чтения;
PAGE_READWRITE – передаваемая часть файла доступна для чтения и
записи, при этом в функции CreateFile() должны использоваться параметры: GENERIC_READ и GENERIC_WRITE.
PAGE_WRITECOPY – доступен для записи и копирования, в CreateFile()
должны использоваться:
GENERIC_READ и GENERIC_WRITE.
Если четвертый и пятый параметры равны NULL, то в них автоматически помещается значение размера отображаемого файла.
Последний шестой параметр содержит имя объекта отображения. По этому имени разные процессы могут обращаться к этому файлу, что позволяет разделять память между приложениями. Если задания имени объекта не требуется, то значение параметра NULL.
Пример:
hMap = CreateFileMapping (hFile, NULL, PAGE_READONLY, 0, 0, NULL);
Функция MapViewOfFile()
Вызов CreateFileMapping() не позволяет еще использовать отображаемые файлы. Эти функции только открывает отображаемый файл, но не позволяет получить указатель на область ”памяти” в этом файле. Для этого используется MapViewOfFile().
LPVOID MapViewOfFile(
HANDLE hFileObject, // объект возвращаемый функцией
// CreateFileMapping()
DWORD dwAccess, // режим доступа
DWORD dwOffsetHigh, // старшие 32 разряда смещения в файле
DWORD dwOffsetLow, // младшие 32 разряда смещения в файле
DWORD dwNumberBytes); // количество отображаемых байт
Первый параметр – отображает объект, значение дескриптора которого возвращается функцией CreateFileMapping().
Второй параметр устанавливает режим доступа и может принимать следующие значения:
FILE_MAP_WRITE – доступ для чтения/записи;
FILE_MAP_READ – доступ только для чтения;
FILE_MAP_COPY – создание копии при записи.
Третий и четвертый параметры являются старшими и младшими двойными словами, содержащие значение смещения внутри файла, начиная с которого нужно произвести чтение. Эти параметры используються если файл очень большой. Обычно значения их равны 0, что устанавливает чтение с начала файла.
Последний параметр – число отображаемых байт. Если нужно прочитать весь файл, то его значение равно NULL.
Пример:
LPVOID Data = MapViewOfFile( hMap, FILE_MAP_READ, 0, 0, 0);