Функция 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 |
Нет |
|
Замечания по платформе |
Не имеется |