<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>https://wiki.shelek.ru/index.php?action=history&amp;feed=atom&amp;title=FAQ%3AWinAPI_VCPP%3A%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_%D1%84%D0%B0%D0%B9%D0%BB%D0%B0_%D0%B2_%D0%BF%D0%B0%D0%BC%D1%8F%D1%82%D1%8C</id>
		<title>FAQ:WinAPI VCPP:проекция файла в память - История изменений</title>
		<link rel="self" type="application/atom+xml" href="https://wiki.shelek.ru/index.php?action=history&amp;feed=atom&amp;title=FAQ%3AWinAPI_VCPP%3A%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_%D1%84%D0%B0%D0%B9%D0%BB%D0%B0_%D0%B2_%D0%BF%D0%B0%D0%BC%D1%8F%D1%82%D1%8C"/>
		<link rel="alternate" type="text/html" href="https://wiki.shelek.ru/index.php?title=FAQ:WinAPI_VCPP:%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_%D1%84%D0%B0%D0%B9%D0%BB%D0%B0_%D0%B2_%D0%BF%D0%B0%D0%BC%D1%8F%D1%82%D1%8C&amp;action=history"/>
		<updated>2026-05-27T09:44:20Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.25.1</generator>

	<entry>
		<id>https://wiki.shelek.ru/index.php?title=FAQ:WinAPI_VCPP:%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_%D1%84%D0%B0%D0%B9%D0%BB%D0%B0_%D0%B2_%D0%BF%D0%B0%D0%BC%D1%8F%D1%82%D1%8C&amp;diff=736&amp;oldid=prev</id>
		<title>RXL: Новая: ===Как открыть проекцию файла в память и как с ней работать?===  Создание проекции:  &lt;code cpp&gt; HANDLE CreateFileMapping( 	H...</title>
		<link rel="alternate" type="text/html" href="https://wiki.shelek.ru/index.php?title=FAQ:WinAPI_VCPP:%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_%D1%84%D0%B0%D0%B9%D0%BB%D0%B0_%D0%B2_%D0%BF%D0%B0%D0%BC%D1%8F%D1%82%D1%8C&amp;diff=736&amp;oldid=prev"/>
				<updated>2009-10-03T12:59:30Z</updated>
		
		<summary type="html">&lt;p&gt;Новая: ===Как открыть проекцию файла в память и как с ней работать?===  Создание проекции:  &amp;lt;code cpp&amp;gt; HANDLE CreateFileMapping( 	H...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;===Как открыть проекцию файла в память и как с ней работать?===&lt;br /&gt;
&lt;br /&gt;
Создание проекции:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
HANDLE CreateFileMapping(&lt;br /&gt;
	HANDLE hFile, // хендл уже открытого файла&lt;br /&gt;
	LPSECURITY_ATTRIBUTES lpAttributes,&lt;br /&gt;
	DWORD flProtect, // способ открытия проекции&lt;br /&gt;
	DWORD dwMaximumSizeHigh, // размер файла (старшие 4 байта, обычно - 0)&lt;br /&gt;
	DWORD dwMaximumSizeLow, // размер файла (младшие 4 байта)&lt;br /&gt;
	LPCTSTR lpName&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Доступ к созданной проекции производится процедурой:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
LPVOID MapViewOfFile(&lt;br /&gt;
	HANDLE hFileMappingObject, // хендл проекции&lt;br /&gt;
	DWORD dwDesiredAccess, // способ работы с проекцией&lt;br /&gt;
	DWORD dwFileOffsetHigh,&lt;br /&gt;
	DWORD dwFileOffsetLow, // смещение от начала файла (младшие 4 байта)&lt;br /&gt;
	SIZE_T dwNumberOfBytesToMap // длина в байтах (если 0 - то весь файл)&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Далее с файлом можно работать как с обычным массивом в памяти.&lt;br /&gt;
&lt;br /&gt;
После работы с проекцией, её надо освободить.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
BOOL UnmapViewOfFile(&lt;br /&gt;
	LPCVOID lpBaseAddress // адрес, который вернула процедура MapViewOfFile&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
HANDLE hFile = ...; // хендл уже открытого файла&lt;br /&gt;
DWORD dwdFileLen = ...; // размер открытого файла&lt;br /&gt;
HANDLE hMapFile = 0; // хендл для проекции&lt;br /&gt;
&lt;br /&gt;
// создаём проекцию &amp;quot;только для чтения&amp;quot;&lt;br /&gt;
hMapFile = ::CreateFileMapping(hFile, 0, PAGE_READONLY, 0, dwdFileLen, 0);&lt;br /&gt;
&lt;br /&gt;
// хендл hFile можно закрыть уже здесь, в принципе,&lt;br /&gt;
// но мы сделаем это позже&lt;br /&gt;
&lt;br /&gt;
// получаем доступ к проекции (тоже только для чтения)&lt;br /&gt;
BYTE* pbyFile = (BYTE*)::MapViewOfFile(hMapFile, FILE_MAP_READ, 0, 0, 0);&lt;br /&gt;
&lt;br /&gt;
///////////////////&lt;br /&gt;
// тут работаем с массивом pbyFile[dwdFileLen] как с обычным,&lt;br /&gt;
// только не забываем, что он открыт только для чтения&lt;br /&gt;
// ...&lt;br /&gt;
// ...&lt;br /&gt;
// ...&lt;br /&gt;
///////////////////&lt;br /&gt;
&lt;br /&gt;
// отключаем файл данных от адресного пространства&lt;br /&gt;
UnmapViewOfFile(pbyFile);&lt;br /&gt;
&lt;br /&gt;
// освобождаем хендл проекции&lt;br /&gt;
CloseHandle(hMapFile)&lt;br /&gt;
&lt;br /&gt;
// освобождаем хендл открытого файла&lt;br /&gt;
CloseHandle(hFile);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:FAQ:WinAPI VCPP]]&lt;/div&gt;</summary>
		<author><name>RXL</name></author>	</entry>

	</feed>