На главную

On-line справка по Win32 API

Написать письмо
БЕСПЛАТНАЯ ежедневная online лотерея! Выигрывай каждый день БЕСПЛАТНО!
Список всех статей A-B-C-D-E-F-G-H-I-J-K-L-M-N-O-P-Q-R-S-T-U-V-W-X-Y-Z | Скачать Вниз

CreateFileMapping



The CreateFileMapping function creates a named or unnamed file-mapping object for the specified file.

HANDLE CreateFileMapping(

HANDLE hFile, // handle to file to map
LPSECURITY_ATTRIBUTES lpFileMappingAttributes, // optional security attributes
DWORD flProtect, // protection for mapping object
DWORD dwMaximumSizeHigh, // high-order 32 bits of object size
DWORD dwMaximumSizeLow, // low-order 32 bits of object size
LPCTSTR lpName // name of file-mapping object
);


Parameters

hFile

Identifies the file from which to create a mapping object. The file must be opened with an access mode compatible with the protection flags specified by the flProtect parameter. It is recommended, though not required, that files you intend to map be opened for exclusive access.

If hFile is (HANDLE)0xFFFFFFFF, the calling process must also specify a mapping object size in the dwMaximumSizeHigh and dwMaximumSizeLow parameters. The function creates a file-mapping object of the specified size backed by the operating-system paging file rather than by a named file in the file system. The file-mapping object can be shared through duplication, through inheritance, or by name.

lpFileMappingAttributes

Pointer to a SECURITY_ATTRIBUTES structure that determines whether the returned handle can be inherited by child processes. If lpFileMappingAttributes is NULL, the handle cannot be inherited.

Windows NT: The lpSecurityDescriptor member of the structure specifies a security descriptor for the new file-mapping object. If lpFileMappingAttributes is NULL, the file-mapping object gets a default security descriptor.
Windows 95: The lpSecurityDescriptor member of the structure is ignored.

flProtect

Specifies the protection desired for the file view, when the file is mapped. This parameter can be one of the following values:

Value Description
PAGE_READONLY Gives read-only access to the committed region of pages. An attempt to write to or execute the committed region results in an access violation. The file specified by the hFile parameter must have been created with GENERIC_READ access.
PAGE_READWRITE Gives read-write access to the committed region of pages. The file specified by hFile must have been created with GENERIC_READ and GENERIC_WRITE access.
PAGE_WRITECOPY Gives copy on write access to the committed region of pages. The files specified by the hFile parameter must have been created with GENERIC_READ and GENERIC_WRITE access.


In addition, an application can specify certain section attributes by combining (using the bitwise OR operator) one or more of the following section attribute values with one of the preceding page protection values:

Value Description
SEC_COMMIT Allocates physical storage in memory or in the paging file on disk for all pages of a section. This is the default setting.
SEC_IMAGE The file specified for a section's file mapping is an executable image file. Because the mapping information and file protection are taken from the image file, no other attributes are valid with SEC_IMAGE.
SEC_NOCACHE All pages of a section are to be set as non-cacheable. This attribute is intended for architectures requiring various locking structures to be in memory that is never fetched into the processor's. On 80x86 and MIPS machines, using the cache for these structures only slows down the performance as the hardware keeps the caches coherent. Some device drivers require noncached data so that programs can write through to the physical memory. SEC_NOCACHE requires either the SEC_RESERVE or SEC_COMMIT to also be set.
SEC_RESERVE Reserves all pages of a section without allocating physical storage. The reserved range of pages cannot be used by any other allocation operations until it is released. Reserved pages can be committed in subsequent calls to the VirtualAlloc function. This attribute is valid only if the hFile parameter is (HANDLE)0xFFFFFFFF; that is, a file mapping object backed by the operating sytem paging file.


dwMaximumSizeHigh

Specifies the high-order 32 bits of the maximum size of the file-mapping object.

dwMaximumSizeLow

Specifies the low-order 32 bits of the maximum size of the file-mapping object. If this parameter and dwMaximumSizeHig are zero, the maximum size of the file-mapping object is equal to the current size of the file identified by hFile.

lpName

Points to a null-terminated string specifying the name of the mapping object. The name can contain any character except the backslash character (\).

If this parameter matches the name of an existing named mapping object, the function requests access to the mapping object with the protection specified by flProtect.
If this parameter is NULL, the mapping object is created without a name.



Return Values

If the function succeeds, the return value is a handle to the file-mapping object. If the object existed before the function call, the GetLastError function returns ERROR_ALREADY_EXISTS, and the return value is a valid handle to the existing file-mapping object (with its current size, not the new specified size. If the mapping object did not exist, GetLastError returns zero.
If the function fails, the return value is NULL. To get extended error information, call GetLastError.

Remarks

After a file-mapping object has been created, the size of the file must not exceed the size of the file-mapping object; if it does, not all of the file's contents will be available for sharing.
If an application specifies a size for the file-mapping object that is larger than the size of the actual named file on disk, the file on disk is grown to match the specified size of the file-mapping object.
The handle that CreateFileMapping returns has full access to the new file-mapping object. It can be used with any function that requires a handle to a file-mapping object. File-mapping objects can be shared either through process creation, through handle duplication, or by name. For information on duplicating handles, see DuplicateHandle. For information on opening a file-mapping object by name, see OpenFileMapping.

Windows 95: File handles that have been used to create file-mapping objects must not be used in subsequent calls to file I/O functions, such as ReadFile and WriteFile. In general, if a file handle has been used in a successful call to the CreateFileMapping function, do not use that handle unless you first close the corresponding file-mapping object.
Creating a file-mapping object creates the potential for mapping a view of the file but does not map the view. The MapViewOfFile and MapViewOfFileEx functions map a view of a file into a process's address space.

With one important exception, file views derived from a single file-mapping object are coherent, or identical, at a given time. If multiple processes have handles of the same file-mapping object, they see a coherent view of the data when they map a view of the file.
The exception has to do with remote files. Although CreateFileMapping works with remote files, it does not keep them coherent. For example, if two computers both map a file as writable, and both change the same page, each computer will only see its own writes to the page. When the data gets updated on the disk, it is not merged.

A mapped file and a file accessed by means of the input and output (I/O) functions (ReadFile and WriteFile) are not necessarily coherent.
To fully close a file mapping object, an application must unmap all mapped views of the file mapping object by calling UnmapViewOfFile, and close the file mapping object handle by calling CloseHandle. The order in which these functions are called does not matter. The call to UnmapViewOfFile is necessary because mapped views of a file mapping object maintain internal open handles to the object, and a file mapping object will not close until all open handles to it are closed.

Example

To implement a mapping-object creation function that fails if the object already exists, an application can use the following code.

hMap = CreateFileMapping(...);
if (hMap != NULL && GetLastError() == ERROR_ALREADY_EXISTS) {
CloseHandle(hMap);
hMap = NULL;
}
return hMap;


See Also

CloseHandle, DuplicateHandle, MapViewOfFile, MapViewOfFileEx, OpenFileMapping, ReadFile, SECURITY_ATTRIBUTES, UnmapViewOfFile, VirtualAlloc, WriteFile


Пригласи друзей и счет твоего мобильника всегда будет положительным!
Предыдущая статья
 
Сайт Народ.Ру Интернет
Следующая статья
Пригласи друзей и счет твоего мобильника всегда будет положительным!

CreateFileMapping



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

РУЧКА CreateFileMapping(

РУЧКА hFile, // оперируется в файл, чтобы отображать LPSECURITY_ATTRIBUTES lpFileMappingAttributes, // дополнительные атрибуты безопасности DWORD flProtect, // защиты для распределения объекта DWORD dwMaximumSizeHigh, // старшие 32 бита объектного размера DWORD dwMaximumSizeLow, // младшие 32 бита объектного имени размера LPCTSTR lpName // файлового распределения объекта
);


Параметры

hFile

Идентифицирует файл из которого, чтобы создавать распределение объекта. Файл должен быть открыт способом доступа совместимым с флагами защиты определенными параметром flProtect. Рекомендовано, все-же не требовавшееся, что файлы, которые Вы предназначаетесь на карту открыт для исключительного доступа.

Если hFile - (HANDLE)0xFFFFFFFF, вызов процесса должен также определить объектный размер распределения в dwMaximumSizeHigh и параметрах dwMaximumSizeLow. Функция создает файловое распределение объекта определенного размера возвращанного файлом подкачки операционной системы а не поименованным файлом в файловой системе. Файловое распределение объекта может быть распространено через дублирование, через наследство, или по имени.

lpFileMappingAttributes

Указатель в структуру SECURITY_ATTRIBUTES, которая определяет может возвращанная ручка быть унаследована процессами ребенка. Если lpFileMappingAttributes НЕДЕЙСТВИТЕЛЕН, ручка не может быть унаследована.

Окно NT: член lpSecurityDescriptor структуры определяет дескриптор безопасности для файлового распределения нового объекта. Если lpFileMappingAttributes НЕДЕЙСТВИТЕЛЕН, файловое распределение объекта получает встроенный дескриптор безопасности.
Окно 95: член lpSecurityDescriptor структуры проигнорирован.

flProtect

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

Описание Величины
PAGE_READONLY Дает только для чтения доступ к совершенному региону страниц. Попытка, чтобы писаться на или выполнять совершенные результаты региона в нарушении доступа. Файл определенный параметром hFile по-видимому создан доступом GENERIC_READ.
PAGE_READWRITE Дает прочитанная запись доступа к совершенному региону страниц. Файл определенный hFile по-видимому создан GENERIC_READ и доступом GENERIC_WRITE.
PAGE_WRITECOPY Дает копию в писать доступе к совершенному региону страниц. Файлы определенные параметром hFile по-видимому созданы GENERIC_READ и доступом GENERIC_WRITE.


Кроме того, приложение может определить определенные атрибуты секции объединяя (использование поразрядный ИЛИ оператор) одна или более из следующей секции приписывают величины с одной из предыдущих страничных величин защиты:

Описание Величины
SEC_COMMIT Распределяет физическую память в памяти или в файле подкачки на диске для всех страниц секции. Это - по умолчанию установка.
SEC_IMAGE файл определенный для файлового распределения секции - выполняемый файл образа. Поскольку отображающая информация и файловая защита взяты из файла образа, никакие другие атрибуты не будут в силе с SEC_IMAGE.
SEC_NOCACHE Всех страниц секции должны быть установлены как не-cacheable. Этот атрибут предназначен для архитектуры, требующей различную блокировку структур, чтобы быть в памяти, что никогда не выбран в процессор. В 80x86 и машинах MIPS, использовавших кеш для этих структур только замедляет исполнение как аппаратные средства держит кеши когерентные. Некоторые драйверы устройства требуют noncached данные чтобы программы могут записаться вплоть до физической памяти. SEC_NOCACHE требует или SEC_RESERVE или SEC_COMMIT, чтобы также установлен.
SEC_RESERVE Резервирует все страницы секции не распределяя физическую память. Резервный дипазон страниц не может быть использован любыми другими операциями распределения пока не будет выпущено. Резервные страницы могут быть совершены на последующих вызовах в функцию VirtualAlloc. Этот атрибут - в силе только если параметр hFile - (HANDLE)0xFFFFFFFF; то есть, файл, отображающий объект возвращался операционным sytem файлом подкачки.


dwMaximumSizeHigh

Определяет старшие 32 бита максимального размера файлового распределения объекта.

dwMaximumSizeLow

Определяет младшие 32 бита максимального размера файлового распределения объекта. Если этот параметр и dwMaximumSizeHig - нуль, максимальный размер файлового распределения объекта равняется текущему размеру файла идентифицированного hFile.

lpName

Точки на недействительный расторгнутую строку, определяющие имя распределения объекта. Имя может содержать любой символ кроме символа обратной косой черты (\).

Если этот параметр соответствует имени существующего поименованного распределения объекта, функциональный доступ запросов к распределению объекта с защитой определенной flProtect.
Если этот параметр НЕДЕЙСТВИТЕЛЕН, отображающий объект создан без имени.



Обратные Величины

Если функция добивается успеха, обратная величина является ручкой в файловое распределение объекта. Если объект существовал бы перед функциональным вызовом, функциональный возврат GetLastError ERROR_ALREADY_EXISTS, и обратная величина является правильной ручкой в файловое распределение существующего объекта (со своим текущим размером, не новый определенный размер. Если отображающий объект не существовал бы, нуль возврата GetLastError.
Если функция терпит неудачу, обратная величина НЕДЕЙСТВИТЕЛЬНА. Для того, чтобы расширять информацию ошибки, назовите GetLastError.

Замечания

После того, как файловое распределение объекта будет создано, размер файла не должен превышать размер файлового распределения объекта; если это делает, не все файловое содержание будет доступно для разделения.
Если приложение определяет размер для файлового распределения объекта, которое большее чем размер фактического поименованного файла на диске, файл на диске возрасти, чтобы соответствовать определенному размеру файлового распределения объекта.
Ручка, что возврат CreateFileMapping имеет полный доступ к файловому распределению нового объекта. Может быть использовано любой функцией, которая требует ручку в файловое распределение объекта. Файловое распределение объектов могут быть распространены также через создание процесса, через дублирование ручки, или по имени. Для информации о дублировании ручек, смотри DuplicateHandle. Для информации об открытии файлового распределения объекта по имени, смотри OpenFileMapping.

Windows 95: Файл оперирует, что использован, чтобы создавать файловое распределение объектов не должно использовано на последующих вызовах в файловые функции В/В, как например, ReadFile и WriteFile. В общих чертах, если файловая ручка использована на успешном вызове в функцию CreateFileMapping, не использована эта ручка если Вы сначала не закрываете файловое распределение соответствующего объекта.
Создание файлового распределения объекта создает потенциал для распределения вида файла но не отображает вид. MapViewOfFile И карта функций MapViewOfFileEx вид файла в пространство адреса процесса.

С одним важным исключением, файл рассматривает производный от файлового распределения единственного объекта - когерентные, или идентичные, в данном времени. Если многочисленные процессы имеют ручки того же самого файлового распределения объекта, они видят когерентный вид данных когда они отображают вид файла.
Исключение должно удовлетвориться дистанционными файлами. Хотя работы CreateFileMapping с дистанционными файлами, это не сохраняет им когерентный. Например, если два компьютера как отображают файл как writable, так и оба изменения та же страница, каждый компьютер только увидит свой собственный записывается на страницу. Когда данные корректироваться на диске, оно не объединено.

Отображенный файл и файл доступный посредством ввода и выхода (В/В) функций (ReadFile и WriteFile), не обязательно когерентные.
Для того, чтобы полностью закрывать файл, отображающий объект, приложение должно unmap все отображенные виды файла, отображающего объект вызывая UnmapViewOfFile, и закройте файл, отображающий объектную ручку вызывая CloseHandle. Порядок в котором эти функции названы не имеет значения. Вызов на UnmapViewOfFile необходим поскольку отображенные виды файла, отображающего объект поддерживают внутренним открытым ручкам на объект, и файл, отображающие объект не закроется до все открытые ручки, чтобы закрыто.

Пример

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

hMap = CreateFileMapping(...);
если (hMap != НЕДЕЙСТВИТЕЛЬНЫЙ && GetLastError() == ERROR_ALREADY_EXISTS) { CloseHandle(hMap);
hMap = НЕДЕЙСТВИТЕЛЬНЫЙ;
}
возвращайте hMap;


Смотри Также

CloseHandle, DuplicateHandle, MapViewOfFile, MapViewOfFileEx, OpenFileMapping, ReadFile, SECURITY_ATTRIBUTES, UnmapViewOfFile, VirtualAlloc, WriteFile


Вверх Version 1.3, Oct 26 2010 © 2007, 2010, mrhx Вверх
 mrhx software  Русский перевод OpenGL  Русский перевод Win32 API
 
Используются технологии uCoz