функція createfilemapping

Зверніть увагу! на те, що таке виконання може викликати загрозу безпеці. Щоб уникнути цього ризику, використовуйте допустиму структуру SECURITY_ATTRIBUTES.

flProtect [in] Вид захисту необхідний для файлу, коли він відображається. Цим параметром може бути одне з нижче перерахованих значень.

Дає доступ до сторінок переданої області тільки для читання. Спроба записати в передану область, призводить до порушення прав доступу. Файл, який визначається параметром hFile повинен бути створений з правом доступу GENERIC_READ.

Дає доступ до операцій читання-запису сторінок переданої області. Файл, який визначається hFile повинен бути створений з правами доступу GENERIC_READ і GENERIC_WRITE.

Дає доступ до копіювання при записі сторінок переданої області. Файли, які визначаються параметром hFile повинні створюватися з правами доступу GENERIC_READ і GENERIC_WRITE.

Дає доступ для читання і виконання до сторінок переданої області. Файл, визначений параметром hFile. повинен бути створений з правами доступу GENERIC_READ і GENERIC_EXECUTE.

Крім того, додаток може задати деякі атрибути розділу, об'єднуючи (використовуючи побітовий оператор OR) одне або кілька нижченаведених значень атрибутів розділу з одним з попередніх значень захисту сторінки.

Розміщує фізичний пристрій зберігання даних в пам'яті або в файлі підкачки на диску для всіх сторінок розділу. Це - задана за замовчуванням (типова) установка.

Windows Me / 98/95: Цей прапорець не підтримується.

Всі сторінки розділу визначаються як некешіруемие.

Додатки не повинні використовувати цей прапорець крім випадків, коли він явно потрібно для пристрою. Використання взаімоблокіруемих функцій пам'яттю, яка відображається розділом SEC_NOCACHE може привести до виняткової ситуації EXCEPTION_ILLEGAL_INSTRUCTION.

Зверніть увагу! на те, що прапорець SEC_NOCACHE вимагає, щоб також були встановлені, або SEC_RESERVE. або SEC_COMMIT.

Windows Me / 98/95: Цей прапорець не підтримується.

Резервує всі сторінки розділу, не розміщуючи їх в фізичну пам'ять. Зарезервований блок сторінок не може використовуватися ніякими іншими операціями розподілу, до тих пір, поки він не звільниться. Зарезервовані сторінки можуть бути передані при наступних викликах функції VirtualAlloc. Цей атрибут допустимо тільки в тому випадку, якщо параметр hFile має значення INVALID_HANDLE_VALUE; тобто це об'єкт "проектується файл", підтримуваний файлом підкачки операційної системи.

[In] Старше подвійне слово (DWORD) максимального розміру об'єкта "проектується файл".

[In] Молодше подвійне слово (DWORD) максимального розміру об'єкта "проектується файл". Якщо цей параметр і dwMaximumSizeHigh дорівнюють нулю, максимальний розмір об'єкта "проектується файл" дорівнює поточному розміру файлу, ідентифікованого hFile.

Спроба відобразити в пам'яті файл з нульовою довжиною цим способом завершується помилкою з кодом ERROR_FILE_INVALID. Додатки повинні виявляти файли з нульовою довжиною і відхиляти такі файли.

[In] Покажчик на символьний рядок з нулем в кінці, визначальну ім'я "проектованого" об'єкта.

Якщо цей параметр відповідає назві існуючого іменованого "проектованого" об'єкта, функція запитує доступ до "проецируемую" об'єкту з захистом, заданої параметром flProtect.

Якщо цей параметр - ПУСТО (NULL), "проектується" об'єкт створюється без імені.

Якщо lpName відповідає імені існуючого події, семафора, мьютекса, чекає таймера або об'єкта завдання, функція завершується помилкою, а функція GetLastError повертає помилку ERROR_INVALID_HANDLE. Це відбувається, тому що ці об'єкти, спільно використовують один і той же простір імен.

Термінал сервісів: Назва може мати префікс "Global \" або "Local \", щоб явно створити об'єкт з глобальним або сесійним простором імен. Остаточний член імені може містити будь-який символ окрім символу зворотного слеша (\). Для отримання додаткової інформації, див. Статтю Простору імен ядра об'єкта.

Windows XP Home Edition: Швидке перемикання користувача здійснюється, за допомогою використання сеансів Терміналу сервісів. Перший користувач, який почне роботу використовує сесію 0, наступний користувач, який почне роботу використовує сесію 1 і так далі. Імена об'єкта ядра повинні слідувати керівним принципам, окресленим в Терміналі сервісів так, щоб програми могли підтримати численних користувачів.

Windows NT. Ім'я може містити будь-який символ окрім символу зворотного слеша (\).

Windows 95/98 / Me: Ім'я може містити будь-який символ окрім символу зворотного слеша (\). Порожній рядок ( "") - допустиме ім'я об'єкта.

Якщо функція завершується успішно, повертається значення - дескриптор об'єкта "проектується" файл. Якщо об'єкт існував перед викликом функції, функція повертає дескриптор існуючого об'єкта (з його поточним розміром, не визначеним розміром), а функція GetLastError повертає помилку ERROR_ALREADY_EXISTS.

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

Якщо додаток встановлює розмір об'єкта "проектується файл", який є більше, ніж розмір дійсного названого файлу на диску, файл на диску збільшується, щоб відповідати зазначеному розміру об'єкта "проектується файл". Якщо файл не може збільшитися, це призводить до збою в створенні об'єкта "проектується файл". Функція GetLastError поверне помилку ERROR_DISK_FULL.

Дескриптор, який повертає функція CreateFileMapping. має повний доступ до нового об'єкту "проектується файл". Він може використовуватися з будь-якою функцією, яка вимагає дескриптора об'єкта "проектується файл". Об'єкти "проектується файл" можуть спільно використовуватися чи використовувати правову допомогу створення процесу, чи використовувати правову допомогу дублювання дескриптора, або по імені. За інформацією про дублювання дескрипторів, см. Опис функції DuplicateHandle. За інформацією про відкриття об'єкта "проектується файл" по імені, див. Опис функції OpenFileMapping.

Windows 95/98 / Me: Дескриптори файлу, які використовувалися, щоб створити об'єкти "проектується файл", не повинні використовуватися при наступних викликах функцій файлового введення - виведення, типу ReadFile і WriteFile. Взагалі, якщо дескриптор файлу використовувався при успішному виконанні функції CreateFileMapping. не використовуйте цей дескриптор, якщо спершу не закриєте відповідний об'єкт "проектується файл".

Першою важливою винятковою ситуацією є подання файла, отримані з єдиного об'єкта "проектується" файл послідовно, або те ж саме, в даний час. Якщо кілька процесів мають дескриптори того ж самого об'єкта "проектується" файл, вони бачать послідовне уявлення даних, коли відображають уявлення файлу.

Виняткова ситуація має відношення до віддалених файлів. Хоча функція CreateFileMapping і працює з віддаленими файлами, вона не зберігає їх послідовність. Наприклад, якщо два комп'ютери і проектують файл як перезаписуваний і замінюють, одну і ту ж сторінку, кожен комп'ютер буде тільки бачити свою власну запис на сторінці. Коли дані оновлюються на диску, вони не об'єднуються.

Відображається файл і файл, який отримав доступ за допомогою функцій введення / виводу даних (I / O) (ReadFile і WriteFile) не обов'язково пов'язані.

Щоб повністю закрити об'єкт "проектується файл", додаток повинен скасувати відображення всіх відображуваних видів об'єкта "проектується файл" за допомогою виклику функції UnmapViewOfFile і закрити дескриптор об'єкта "проектується файл" за допомогою виклику функції CloseHandle. Порядок, в якому ці функції викликаються, не має значення. Виклик UnmapViewOfFile необхідний, тому що відображаються види об'єкта "проектується файл" обслуговують внутрішні відкриті дескриптори об'єктів, а об'єкт "проектується файл" ви не вийдете до тих пір, поки всі відкриті дескриптори для нього не закриються.

Сесії Терміналасервісов можуть використовувати спільно використовувані блоки пам'яті, щоб переміщати дані між процесами, породженими цими сесіями. Якщо Ви робите це, то маєте на увазі, що спільно використовувана пам'ять, не може використовуватися в ситуаціях, де існують обидва з нижченаведених умов:
  • Всі процеси, використовуючи розділяється блок пам'яті не були породжені одним сеансом.
  • Всі сесії спільно використовують одні і ті ж призначені для користувача повноваження входу в систему.

Щоб вжити заходів проти порушення прав доступу, використовуйте структуровану обробку виняткової ситуації для захисту будь-якого коду, який пише або Новомосковскет з пам'яті відображається уявлення. Для отримання додаткової інформації, див. Статтю Читання і запис з представлення даних файлу.

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

Щоб реалізувати функцію створення "проектованого" об'єкта, яка завершується помилкою, якщо об'єкт вже існує, додаток може використовувати нижченаведений код.