Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Объекты отображения файлов



Первый этап — создание для открытого файла объекта отображения файла, кото­рый имеет дескриптор, и последующее отображение адресного пространства процесса на весь файл или на его часть. Объекты отображения файлов могут получать имена, поэтому они доступны другим процессам для разделения памяти. Также отображае­мый объект имеет защиту, атрибуты безопасности и размер.

HANDLE CreateFileMapping (HANDLE hFile, LPSECURITY_ATTRIBUTES lpsa, DWORD fdwProtect,DWORD dwMaximumSizeHigh, DWORD dwMaximumSizeLow,LPCTSTR lpszMapName)

Возвращаемое значение: дескриптор отображения файла или NULL при неудаче.

hFile — дескриптор открытого файла с флагами защиты, совместимыми с пара­метром fdwProtect. Значение (типа HANDLE) 0xFFFFFFFF (эквивалентно константе INVALID_HANDLE_VALUE) указывает на файл подкачки, и вы можете использовать это значение для межпроцессного разделения памяти без создания отдельного файла.

Тип LPSECURITY_ATTRIBUTES позволяет защитить объект отображения. Параметр определяет доступ к отображенному файлу с помощью описанных ниже флагов. Для специальных целей разрешены дополнительные флаги; например, флаг SEC_IMAGE определяет исполняемый образ (подробнее это описано во встроенной до­кументации).

• Установленный флаг PAGE_READONLY означает, что программа может только чи­тать страницы в отображенной области и не может записывать или исполнять их. Файл hFile должен быть открыт с правом доступа GENERIC_READ.

• Флаг PAGE_READWRITE предоставляет полный доступ к объекту, если файл hFileоткрыт с правами доступаGENERIC_READ и GENERIC_WRITE.

• Флаг PAGE_WRITECOPY определяет, что при изменении содержимого отображен­ной памяти собственная (для данного процесса) копия записывается в файл подкачки, а не в исходный файл. Отладчик может использовать этот флаг при определении точек останова в разделяемом коде. Результат будет различным в Windows 2000/NT и Windows 9x

Параметры dwMaximumSizeHigh и dwMaximumSizeLow определяют размер объекта отображения. Если указан нуль, используется текущий размер; обязательно опреде­ляйте размер при использовании файла подкачки. Если ожидается, что размер файла увеличится, используйте ожидаемый размер, и при необходимости будет немедленно установлен нужный размер файла. Не отображайте область файла за указанной гра­ницей — объект отображения не может расти.

lpszMapName указывает имя объекта отображения, что позволяет другим процес­сам совместно использовать объект. Регистр символов в имени не учитывается. Если разделение памяти не используется, указывайте значение null.

Об ошибке сообщает возвращаемое значение null (a не INVALID_HANDLE_VALUE).

Указав имя существующего объекта отображения, можно получить дескриптор отображения файла. Имя должно быть получено предшествующим вызовом функции CreateFileMapping. Два процесса могут совместно использовать память, разделяя отображение файла. Первый процесс создает отображение файла, а следующий от­крывает это отображение, используя имя. Если названного объекта не существует, от­крыть его не удастся..

HANDLE OpenFileMapping (DWORD dwDesiredAccess, BOOL bInheritHandle, LPCTSTR lpName);

Возвращаемое значение: дескриптор отображения файла или null при неудаче.

dwDesiredAccessиспользует тот же набор флагов, что и параметр функции CreateFileMapping. Значение lpName — имя, полученное вызовом функции CreateFileMapping. Параметр blnheritHandle - наследование дескриптора.

Функция CloseHandle, как и ожидалось, уничтожает дескрипторы отображения.





Дата публикования: 2015-11-01; Прочитано: 427 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.006 с)...