API- функции, необходимые для отображения файла




При выполнении данной лабораторной работы необходимо изучить и использовать следующие API- функции:

· Создание объекта FILE на базе существующего файла

 

HANDLE CreateFile(

LPCTSTR lpFileName,

DWORD dwDesiredAccess,

DWORD dwShareMode,

LPSECURITY_ATTRIBUTES lpSecurityAttributes,

DWORD dwCreationDistribution,

DWORD dwFlagsAndAttributes,

HANDLE hTemplateFile

);

Параметры этой API- функции:

lpFileName – имя открываемого файла;

dwDesiredAccess — GENERIC_READ, чтобы разрешить чтение с устройства. GENERIC_WRITE, чтобы разрешить запись на устройство (константы можно объединить).

Ноль, чтобы разрешить только получение информации об устройстве;

dwShareMode — 0 для запрета общего доступа, FILE_SHARE_READ и/или FILE_SHARE_WRITE для разрешения общего доступа к файлу;

lpSecurityAttributes — указатель на структуру, определяющую атрибуты безопасности файла (если они поддерживаются операционной системой);

dwCreationDistribution — одна из следующих констант: CREATE_NEW: создать файл. Если файл существует, происходит ошибка

CREATE_ALWAYS: создать файл. Предыдущий файл перезаписывается;

OPEN_EXISTING: открываемый файл должен существовать (обязательно используется для устройств)

OPEN_ALWAYS: создать файл, если он не существует TRUNCATE_EXISTING: существующий файл усекается до нулевой длины;

dwFlagsAndAttributes Long — комбинация следующих констант: FILE_ATTRIBUTE_ARCHIVE: установить архивный атрибут; FILE__ATTRIBUTE_COMPRESSED: помечает файл как подлежащий сжатию или задает сжатие для файлов каталога по умолчанию;

FILE_ATTRIBUTE_NORMAL: другие атрибуты файла не заданы;

FILE_ATTRJBUTE_HIDDEN: файл или каталог является скрытым;

FILE_ATTRIBUTE_READONLY: файл доступен только для чтения;

FILE_ATTRIBUTE_SYSTEM: файл является системным; FILE_FLAG_WRITE_THROUGH: операционная система не откладывает операции записи в файл; FILE_FLAG_OVERLAPPED: разрешить перекрывающиеся операции с файлом;

FILE_FLAG_NO_BUFFERING: запретить промежуточную буферизацию файла. Адреса буферов должны выравниваться по границам секторов для текущего тома; FILE_FLAG_RANDOM_ACCESS: буферизация файла оптимизируется для произвольного доступа;

FILE_FLAG_SEQUENTIAL_SCAN: буферизация файла оптимизируется для последовательного доступа;

FILE_FLAG_DELETE_ON_CL0SE: при закрытии последнего открытого дескриптора файл удаляется. Идеально подходит для временных файлов;

В Windows NT в комбинацию также можно включить следующие флаги: SECURITY_ANONYMOUS, SECURITY_IDENTIFICATION, SECURITY_IMPERSONATION, SECURITY_DELEGATI0N,SECURITY_CONTEXT_TRACKING, SECURITY_EFFECTTVE_ONLY;

hTemplateFile — если параметр не равен нулю, он содержит дескриптор файла, с которого будут скопированы расширенные атрибуты нового файла.

Возвращаемое значение - дескриптор файла в случае успеха. INVALID_HANDLE_VALUE при ошибке. Устанавливает информацию GetLastError. Даже если функция завершилась успешно, но файл существовал и был задан флаг CREATE_ALWAYS или OPEN_ALWAYS, GetLastError возвращает ERROR_ALREADY_EXISTS.

Далее приведена структура, определяющая атрибуты безопасности файла:

 

typedef struct _SECURITY_ATTRIBUTES { // sa

DWORD nLength;

LPVOID lpSecurityDescriptor;

BOOL bInheritHandle;

} SECURITY_ATTRIBUTES;

 

· Создание объекта файлового отображения File-mapping

 

HANDLE CreateFileMapping(

HANDLE hFile,

LPSECURITY_ATTRIBUTES lpFileMappingAttributes,

DWORD flProtect,

DWORD dwMaximumSizeHigh,

DWORD dwMaximumSizeLow,

LPCTSTR lpName

);

 

Рассмотрим параметры этой API- функции:

hFile – дескриптор файла, для которого создается отображение;

lpFileMappingAttributes — SECUR1TY_ATTRIBLITES — объект безопасности, используемый при создании файлового отображения. NULL для использования стандартных атрибутов безопасности;

flProtect — одна из следующих констант:

PAGE_READONLY: созданное файловое отображение доступно только для чтения;

PAGE_READWRITE: файловое отображение доступно для чтения и записи;

PAGE_WRITECQPY: разрешается копирование при записи; Также в комбинацию могут включаться следующие константы: SЕС_СОММГГ: для страниц секции выделяется физическое место в памяти или файле подкачки;

SEC_IMAGE: файл является исполняемым;

SEC_RESERVE: для страниц секции резервируется виртуальная память без фактического выделения.

dwMaximumSizeHigh — максимальный размер файлового отображения (старшие 32 бита);

dwMaximumSizeLow — максимальный размер файлового отображения (младшие 32 бита); Если параметры dwMaximumSizeHigh и dwMaximumSizeLow одновременно равны нулю, используется фактический размер файла на диске;

lpName — имя объекта файлового отображения. Если файловое отображение с заданным именем уже существует, функция открывает его.

 

Возвращаемое значение - дескриптор созданного объекта файлового отображения. Ноль в случае ошибки. Устанавливает информацию GetLastError. Даже если функция завершилась успешно, но возвращенный манипулятор принадлежит существующему объекту фазового отображения, GetLastError возвращает ERROR_ALREADY_EXISTS. В этом случае размер файлового отображении определяется размером существующего объекта, а не параметрами функции.

 

· Функция отображает объект файлового отображения в адресное пространство текущего процесса.

 

LPVOID MapViewOfFile(

HANDLE hFileMappingObject,

DWORD dwDesiredAccess,

DWORD dwFileOffsetHigh,

DWORD dwFileOffsetLow,

DWORD dwNumberOfBytesToMap

);

Рассмотрим параметры этой API- функции:

hFileMappingObject – дескриптор объекта файлового отображения;

dwDesiredAccess — одна из следующих констант:

FILE_MAP_WRITE: отображение доступно для чтения и записи. Объект файлового отображения должен быть создан с флагом PAGE_READWRITE;

FILE_MAP_READ: отображение доступно только для чтения. Объект файлового отображения должен быть создан с флагом PAGE_READ или PAGE_READWRITE; FILE_MAP_ALL_ACCESS: то же, что FILE_MAP_WRITE HLE_MAP_COPY: копирование при записи. В Windows 95 Обьект файлового отображения должен быть создан c флагом PAGE_WRITECOPY;

dwFileOffsetHigh — старшие 32 бита смещения в файле, с которого начинается отображение;

dwFileOffsetLow — младшие 32 бита смещения в файле, с которого начинается отображение;

dwNumberOfBytesToMap — количество отображаемых байт в файле. Ноль, чтобы использовать весь объект файлового отображения;

Возвращаемое значение - начальный адрес отображения в памяти. Ноль при ошибке. Устанавливает информацию GetLastError.

Комментарии: dwOffsetLow и dwOffsetHigh должны содержать смещение с учетом гранулярности выделения памяти в системе. Другими словами, если гранулярность памяти в системе равна 64 Кбайт (выделяемые блоки выравниваются по границе 64 Кбайт), значение должно быть кратно 64 Кбайт. Чтобы получить гранулярность выделения памяти в системе, воспользуйтесь функцией GetSystemlnfo. В большинстве приложений передается ноль, чтобы отображение начиналось с начала файла. Параметр IpBaseAddress также должен быть кратен значению гранулярности.

 

· Функция закрывает объект ядра. К числу объектов ядра относятся объекты файлов,файловых отображений, процессов, потоков, безопасности и синхронизации.

 

BOOL CloseHandle(

HANDLE hObject // дескриптор закрывамого объекта.

);

 

Возвращаемое значение - ненулевое значение в случае успеха, ноль при ошибке. Устанавливает информацию GetLastError.

Комментарии: Объекты ядра удаляются лишь после того, как будут закрыты все ссылки на них.

 

· Функция прекращает отображение объекта в адресное пространство текущего процесса.

 

BOOL UnmapViewOfFile(

LPCVOID lpBaseAddress // базовый адрес отображения, установленного ранее функцией MapViewOfFile

);

 

VOID CopyMemory (

 

PVOID Destination, // address of copy destination

CONST VOID *Source, // address of block to copy

DWORD Length // size, in bytes, of block to copy

);

 

 


СОДЕРЖАНИЕ ОТЧЕТА

1. Наименование лабораторной работы, ее цель.

 

2. Результаты исследования ОС с использованием Системного монитора (Monitor из пункта Administrative Tools):

· определить количество процессов, потоков, дескрипторов в ОС, изменить их число, запуская на выполнение новые приложения;

· определить процент работы в пользовательском режиме (% User Time), процент работы в привилегированном режиме (% Privileged Time) и процент времени бездействия при выполнении, связанными с интенсивными графическими операциями (например, откройте Windows Pain);

· включить в отчет полученные графики и привести их объяснение.

 

3. Разработанное программное обеспечение приложения, реализующего следующую задачу:

· Создать текстовый файл (можно с использованием notepad).

· Создать объект File на базе созданного в предыдущем пункте файла, используя АРI-функцию CreateFile. Вывести значение дескриптора объекта File.

· Используя дескриптор объекта File-mapping, а также API-функцию MapViewOf File отобразить части файла в память. Данная функция назначает область виртуальной памяти, выделяемой этому файлу. Базовый адрес выделенной области памяти является дескриптором представления этой области в виде отображения файла.

· Используя базовый адрес и функцию CopyMemory прочитайте информацию из отображаемого файла. Измените регистр текста в тестовом файле и запишите информацию в тот же файл.

· Закрыть все дескрипторы.

На экране должны фиксироваться все этапы работы созданного приложения.

 

4. Примеры разработанных приложений (результаты и тексты программ).

 

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2019-03-27 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: