Функция MapViewOfFile


Функция MapViewOfFile отображает представление проецируемого файла в адресное пространство вызывающего процесса.

Чтобы установить предполагаемый базовый адрес представления, используйте функцию MapViewOfFileEx.

Синтаксис

 LPVOID MapViewOfFile(
  HANDLE hFileMappingObject,  // дескр. объекта проецируемый файл
  DWORD dwDesiredAccess,      // режим доступа
  DWORD dwFileOffsetHigh,     // старшее DWORD смещения
  DWORD dwFileOffsetLow,      // младшее DWORD смещения
  SIZE_T dwNumberOfBytesToMap // число отображаемых байтов
);

Параметры

hFileMappingObject

[in] Дескриптор открытого дескриптора объекта "проецируемый файл". Функции CreateFileMapping и OpenFileMapping возвращают этот дескриптор.

dwDesiredAccess

[in] Тип доступа к объекту "проецируемый файл" и, следовательно, это защита страниц, отображаемого файла. Этим параметром могут быть одно из ниже перечисленных значений.

 

Значение Предназначение
FILE_MAP_WRITE Доступ к операциям чтения-записи. Отображаемый объект должен быть создан с защитой PAGE_READWRITE . Чтение/запись представления файла отображается.
FILE_MAP_READ Доступ только для чтения. Отображаемый объект должен быть создан с защитой PAGE_READWRITE или PAGE_READONLY. Представление файла только для чтения отображается.
FILE_MAP_ALL_ACCESS То же самое, что и FILE_MAP_WRITE.
FILE_MAP_COPY Копирование при доступе для записи. Отображаемый объект должен создаваться с флажком защиты PAGE_WRITECOPY.  

Система помещает физическое сохранение данных из файла подкачки, когда вызывается MapViewOfFile. Фактическое физическое запоминающее устройство не используется до тех пор, пока поток в вашем процессе не запишет по адресу в представлении. В этой точке система копирует исходную страницу в новую страницу, поддерживаемую файлом подкачки, отображает страницу в адресное пространство процесса и изменяет защиту страницы на PAGE_READWRITE. Потоки в вашем процессе могут получить доступ только к этой локальной копии данных, а не первоначальным данным. Если эта страница когда-либо вырезается от рабочего набора страниц физической памяти вашего процесса, тогда она может записаться в запоминающем устройстве файла подкачки, которое было передано, когда вызывалась MapViewOfFile. Этот процесс только назначает физическую память, когда действительно записывается по виртуальному адресу. Изменения никогда не записываются обратно в исходный файл и освобождаются, когда поток в вашем процессе отменяет отображение представления.

Пространство файла подкачки всего представления передается тогда, когда определяется доступ копирования при записи, потому что это дает возможность потоку в вашем процессе писать в каждую отдельно взятую страницу. Поэтому, когда вызывается MapViewOfFile, должно быть получено достаточно физического пространства устройства хранения данных.

FILE_MAP_EXECUTE Доступ к исполнению кода (программы). Код, может быть запущен из отображаемой памяти. "Проецируемый " объект должен быть создан с доступом PAGE_EXECUTE_READWRITE или PAGE_EXECUTE_READ.

Windows XP и Windows Server 2003: Эта функция не доступна до тех пор, пока не модернизируются до Windows XP SP2 и Windows Server 2003 SP1.

 

dwFileOffsetHigh

[in] Старшее двойное слово (DWORD) смещения файла, где начинается отображение.

dwFileOffsetLow

[in] Младшее двойное слово (DWORD) смещения файла, где начинается отображение. Комбинация старшего и младшего смещения должна установить смещение внутри файла, которое соответствует степени дробления системой распределенной памяти, или функция завершается ошибкой. То есть, смещение должно быть кратно степени дробления памяти. Используйте функцию GetSystemInfo, которая заполняет члены структуры SYSTEM_INFO, чтобы получить степень дробления системой распределенной памяти.

dwNumberOfBytesToMap

[in] Число отображаемых байтов файла. Если этот параметр равняется нулю, отображается весь файл.

Возвращаемые значения

Если функция завершается успешно, возвращаемое значение - начальный адрес отображаемого представления.

Если функция завершается ошибкой, возвращаемое значение - ПУСТО (NULL). Чтобы получить дополнительную информацию об ошибке, вызовите GetLastError.

Замечания

Отображение файла делает заданную часть файла, видимой в адресном пространстве вызывающего процесса.

Для файлов, которые являются большими чем ваше адресное пространство, Вы можете одновременно отобразить только маленькую часть данных файла. Когда Вы закончите с первым представлением, тогда Вы отменяете его отображение и отображаете новое представление.

Несколько представлений файла (или объект "проецируемый файл" и его отображаемый файл), как говорят, являются "последовательными", если они содержат идентичные данные в заданном времени. Это происходит, если представления файла получены из одного и того же объекта "проецируемый файл". Процесс может продублировать дескриптор объекта "проецируемый файл" в другой процесс, используя функцию DuplicateHandle, или другой процесс может открыть объект "проецируемый файл" по имени, используя функцию OpenFileMapping.

Отображаемое представление файла не гарантирует, что будет последовательным с файлом, к которому обращается функция ReadFile или WriteFile.

Чтобы принять меры против исключений типа STATUS_IN_PAGE_ERROR, используйте структурную обработку исключений, чтобы защитить любой код, который пишет в или читает из памяти отображаемого представления. Дополнительную информацию, см. в статье Чтение и запись из представления данных файла.

Windows NT/2000/XP: Если объект "проецируемый файл" поддерживается файлом подкачки (hFile - INVALID_HANDLE_VALUE), то этот файл должен быть достаточно большим, чтобы вместить все отображение. Если это не так, функция MapViewOfFile завершается ошибкой.

Windows 95/98/Me: Функция MapViewOfFile может потребовать, чтобы файл подкачки рос. Если файл подкачки не может расти, функция завершается ошибкой.

Чтобы получить файл с правом исполнения кода, ваше приложение должно вызвать функцию CreateFileMapping  с флажком или PAGE_EXECUTE_READWRITE или  PAGE_EXECUTE_READ, а затем вызвать MapViewOfFile с FILE_MAP_EXECUTE | FILE_MAP_WRITE или FILE_MAP_EXECUTE | FILE_MAP_READ.

Код примера

Пример, см. в статье Создание именованной совместно используемой памяти.

Смотри также 

Обзор Управление файламиФункции, используемые для отображения файла в память, CreateFileMapping, DuplicateHandle, GetSystemInfo, MapViewOfFileEx, OpenFileMapping, UnmapViewOfFile, SYSTEM_INFO

Размещение и совместимость MapViewOfFile

К

Windows XP

Да 

л

Windows 2000 Professional

Да

и

Windows NT Workstation

Да

е

Windows Me

Да

н

Windows 98

Да

т

Windows 95

Да

 
С

Windows Server 2003

Да

е Windows 2000 Server Да
р Windows NT Server Да 
в    
е    
р    

Используемая библиотека

Kernel32.lib

Используемая DLL -
 Заголовочный файл  

- объявлено в

Winbase.h

 - включено в

Windows.h

 Unicode

Нет 

 Замечания по платформе

Не имеется

 

Назад в оглавление
На главную страницу
На оглавление справки

Hosted by uCoz