- •1. Поняття ос, її призначення та функції.
- •1. Понятие операционной системы. Назначение, состав и функции операционных систем.
- •2. Історія розвитку ос. Класифікація сучасних ос.
- •3. Основные принципы построения ос.
- •4. Операционные оболочки.
- •5. Драйверы и утилиты.
- •6. Процессы. Определение процесса. Классификация процессов ос.
- •4. Функциональные компоненты ос. Общая характеристика
- •7. Ресурсы. Определение ресурса. Классификация ресурсов ос.
- •3. Функціональні компоненти ос.
- •5. Требования к современным ос
- •4. Ядро ос. Привілейований режим і режим користувача. Системний виклик.
- •Рхитектура ос
- •Ядро и вспомогательные модули ос
- •Ядро в привилегированном режиме
- •Микроядерная архитектура
- •Тенденции в структурном построении ос
- •Монолитные системы
- •Многоуровневые системы
- •6. Ос та її оточення. Взаємодія ос і апаратного забезпечення. Засоби апаратної підтримки ос
- •Взаимодействие с аппаратным обеспечением
- •По сфере применения[править | править вики-текст]
- •Содержание
- •Описание и использование интерфейсов[править | править вики-текст]
- •Интерфейсы и абстрактные классы[править | править вики-текст]
- •Множественное наследование и реализация интерфейсов[править | править вики-текст]
- •8. Особливості архітектури Windows. Компоненти режиму ядра. Компоненти режиму користувача. Архитектура Windows nt
- •Режим пользователя[править | править вики-текст]
- •Режим ядра[править | править вики-текст]
- •9. Процеси і потоки в сучасних ос. Складові елементи процесів і потоків. Багатопотоковість. Стани процесів і потоків. Поток выполнения
- •Отличие от процессов[править | править вики-текст]
- •Многопоточность[править | править вики-текст]
- •10. Інтерфейс Windows api. Версії Windows api. Категорії функцій Windows api.
- •Содержание
- •Общие сведения[править | править вики-текст]
- •Содержание
- •Api как средство интеграции приложений[править | править вики-текст]
- •Сигнатура функции[править | править вики-текст]
- •Семантика функции[править | править вики-текст]
- •Api операционных систем. Проблемы, связанные с многообразием api[править | править вики-текст]
- •Структура security_attributes
- •Возвращаемые значения
- •Замечания
- •Содержание
- •Общие сведения[править | править вики-текст]
- •Секреты многопоточности: изучаем модульное тестирование в сфере мобильного программинга
- •Объект ядра Событие
- •Объект ядра Мьютекс
- •Пример работы Mutex
- •Объект ядра Семафор (semaphore)
- •Критические секции
- •Атомарные операции
- •Заключение
- •15. Потоки. Функція CreateThread. Завершення потоку. Зміна класу пріоритету процесу. Установка відносного пріоритету потоку.
- •17. Робота з файлами, каталогами і дисками в Win32. Отримання інформації про диски, вільний простір.
- •18. Функція CreateFile та її параметри. Функция CreateFile
- •Коммуникационные ресурсы
- •19. Функції Windows api для пошуку файлів. Применение функций Windows api
- •Функции LoadKeyboardLayout и UnloadKeyboardLayout
- •Функция GetLocalTime
- •Функция GetTickCount
- •Функция GlobalMemoryStatus
- •Функция Sleep
- •Функции для работы с guid
- •Функция ShellExecute
- •Функция shFileOperation
- •20. Функції Windows api для читання даних з файлу та запису в файл. Синхронні і асинхронні операції з файлами. Функции api для работы с консолью
- •Использование русского языка в консоли с помощью api
- •Чтение/запись данных в консоль/файл
- •Установка заголовка окна консоли
- •Установка цвета символов и фона в консоли
- •Установка позиции курсора
18. Функція CreateFile та її параметри. Функция CreateFile
Функция CreateFile создает или открывает каталог, физический диск, том, буфер консоли (CONIN$ или CONOUT$), устройство на магнитной ленте, коммуникационный ресурс, почтовый слот или именованный канал. Функция возвращает дескриптор, который может быть использован для доступа к объекту.
Windows Me/98/95: Файловая система ограничивает CreateFile в создании или открытии файлов; Вы не можете создать или открыть не те объекты, которые упомянуты выше. Смотрите темы, на которые указывает раздел Смотри также в конце этой справочной страницы для получения дополнительной информации, какие из этих средств обслуживания доступны в этих системах, и как получить доступ к ним.
Синтаксис
HANDLE CreateFile( LPCTSTR lpFileName, // имя файла DWORD dwDesiredAccess, // режим доступа DWORD dwShareMode, // совместный доступ LPSECURITY_ATTRIBUTES lpSecurityAttributes, // SD (дескр. защиты) DWORD dwCreationDisposition, // как действовать DWORD dwFlagsAndAttributes, // атрибуты файла HANDLE hTemplateFile // дескр.шаблона файла ); |
Параметры
lpFileName
[in] Указатель на символьную строку с нулем в конце, устанавливающую имя объекта, который создается или открываться.
Windows NT/2000/XP: В версии ANSI этой функции, число символов имени ограничивается значением MAX_PATH. Чтобы выйти за пределы этого ограничения 32767 символов, вызовите Unicode-версию функции и присоедините спереди пути "\\?\". Подробную информацию см. статье Именование файлов.
Windows 95/98/Me: Эта строка не должна выходить за пределы, установленные значением MAX_PATH.
dwDesiredAccess
[in] Тип доступа к объекту (чтение, запись или то и другое). Перечень значений см. в статье Защита файла и права доступа. Вы не можете требовать режима доступа, который находится в противоречии с режимом совместного использования, заданным в предыдущем запросе открытия объекта, дескриптор которого является все еще открытым. Если этот параметр равняется нулю, приложение может сделать запрос атрибутов устройства, не обращаясь к диску.
Если этот параметр равняется нулю, приложение может запросить атрибуты файла и диска, не обращаясь к устройству. Это применяется в том случае, если приложение хочет выяснить размер дискеты флоппи-диска и форматов, которые он поддерживает, не требуя наличия гибкого диска в диске. Это может также использоваться и для того, чтобы проверить существование файла или каталога, не открывая его доступа для чтения или записи.
dwShareMode
[in] Режим совместного доступа (чтение, запись, оба или никакого действия). Вы не можете требовать режим совместного доступа, который находится в противоречии с режимом доступа, заданным в предыдущем запросе открытия объекта, дескриптор которого является все еще открытым. Сделав так, вы в результате получите ошибку совместного доступа (ERROR_SHARING_VIOLATION). Подробности и примеры см. в статье Создание и открытие файлов.
Если этот параметр равняется нулю, а CreateFile завершается успешно, объект не может совместно использоваться, и не может быть открыт снова до тех пор, пока дескриптор не закроется. Дополнительную информации об ошибках совместного доступа смотри в разделе Замечаний.
Чтобы дать возможность другим процессам совместно использовать объект, в то время, когда ваш процесс открыт, используйте комбинацию из одного или нескольких нижеследующих значений, чтобы определить режим доступа, который они могут запросить, когда открывают объект. Эти параметры совместного использования остаются в силе до тех пор, пока Вы не закройте дескриптор объекта.
Значение |
Предназначение |
FILE_SHARE_DELETE |
Разрешает последующие операции открытия объекта, которые требуют доступа к его удалению. В противном случае, другие процессы не смогут открыть объект, если они потребуют доступа к удалению. Если этот флажок не определяется, но объект уже был открыт с доступом для удаления, то функция завершается ошибкой. Windows Me/98/95: Этот флажок не поддерживается. |
FILE_SHARE_READ |
Разрешает последующие операции открытия объекта, которые требуют доступа для чтения. В противном случае, другие процессы не смогут открыть объект, если они потребуют доступа для чтения. Если этот флажок не определяется, но объект уже был открыт с доступом для чтения, то функция завершается ошибкой. |
FILE_SHARE_WRITE |
Разрешает последующие операции открытия объекта, которые требуют доступа для записи. В противном случае, другие процессы не смогут открыть объект, если они потребуют доступа для записи. Если этот флажок не определяется, но объект уже был открыт с доступом для записи, то функция завершается ошибкой. |
lpSecurityAttributes
[in] Указатель на структуру SECURITY_ATTRIBUTES, которая устанавливает может ли возвращенный дескриптор быть унаследован дочерними процессами. Если lpSecurityAttributes имеет значение ПУСТО (NULL), дескриптор не может быть унаследован.
Windows NT/2000/XP: член структуры lpSecurityDescriptor устанавливает дескриптор безопасности для объекта. Если lpSecurityAttributes имеет значение ПУСТО (NULL), объект получает заданный по умолчанию дескриптор безопасности. Списки контроля доступа (ACL) в заданном по умолчанию дескрипторе безопасности для файла или каталога наследуются от его родительского каталога.
Обратите внимание! на то, что принимающая файловая система, чтобы воздействовать при этом параметре на файлы и каталоги, должна поддерживать их систему безопасности. |
(Это указывается тогда, когда функция GetVolumeInformation возвращает значение FS_PERSISTENT_ACLS.) CreateFile игнорирует параметр lpSecurityDescriptor при открытии существующего файла, но продолжает использовать остальные члены структуры.
dwCreationDisposition
[in] Выполняемые действия с файлами, которые существуют и выполняемые действия с файлами, которые не существуют. Подробную информацию об этом параметре см. в разделе Замечаний. Этот параметр должен быть одним из нижеперечисленных значений.
Значение |
Предназначение |
CREATE_NEW |
Создает новый файл. Функция завершается ошибкой, если заданный файл уже существует. |
CREATE_ALWAYS |
Создает новый файл. Если файл существует, функция переписывает файл, сбрасывает существующие атрибуты и объединяет, заданные параметром dwFlagsAndAttributesатрибуты файла и флажки, с FILE_ATTRIBUTE_ARCHIVE, но не устанавливает дескриптор безопасности заданный структуройSECURITY_ATTRIBUTES. |
OPEN_EXISTING |
Открывает файл. Функция завершается ошибкой, если файл не существует. Подробное обсуждение того, почему вам следует использоватьOPEN_EXISTING для устройств, смотрите в разделе Замечания. |
OPEN_ALWAYS |
Открывает файл, если таковой существует. Если файл не существует, функция создает файл, как будто быdwCreationDisposition имел значение CREATE_NEW. |
TRUNCATE_EXISTING |
Открывает файл и обрезает его так, чтобы его размер равнялся нулю байтов. Вызывающий процесс должен открыть файл с правом доступа GENERIC_WRITE . Функция завершается ошибкой, если файл не существует. |
dwFlagsAndAttributes
[in] Атрибуты и флажки файла.
Ниже следуют атрибуты и флажки файла, которые используются только для объектов файла, а не для других объектов, создаваемых функцией CreateFile.
Когда CreateFile открывает существующий файл, он объединяет флажки файла с существующими его атрибутами, но игнорирует любые предоставляемые атрибуты файла.
Этот параметр может включать в себя любую комбинацию атрибутов файла (заметьте, что все другие атрибуты файла не принимают во внимание атрибут FILE_ATTRIBUTE_NORMAL).
Атрибут |
Предназначение |
FILE_ATTRIBUTE_ARCHIVE |
Файл должен быть архивирован. Приложения используют этот атрибут, чтобы отметить файлы для резервного копирования или перемещения. |
FILE_ATTRIBUTE_ENCRYPTED |
Файл или каталог шифруются. Для файла, это означает, что все данные в файле зашифрованы. Для каталога, это означает, что шифрование - это значение по умолчанию для недавно созданных файлов и подкаталогов. Дополнительную информацию смотри в разделе Шифрование файла. Этот флажок не действует, если также установлен и флажок FILE_ATTRIBUTE_SYSTEM. |
FILE_ATTRIBUTE_HIDDEN |
Файл скрытый. Он не должен включаться в обычный перечень файлов каталога. |
FILE_ATTRIBUTE_NORMAL |
У файла нет других установленных атрибутов. Этот атрибут допустим только в том случае, если он используется один. |
FILE_ATTRIBUTE_NOT_CONTENT_INDEXED |
Файл не будет индексироваться службой индексации содержания. |
FILE_ATTRIBUTE_OFFLINE |
Данные файла доступны не сразу. Этот атрибут указывает, что данные файла были физически перемещены на автономное хранилище данных. Этот атрибут используется Удаленным хранилищем, программой Иерархического управления памятью. Приложения произвольно не должно изменять этот атрибут. |
FILE_ATTRIBUTE_READONLY |
Файл доступен только для чтения. Приложения могут читать файл, но не могут записать в него или удалить его. |
FILE_ATTRIBUTE_SYSTEM |
Файл является частью или используется исключительно операционной системой. |
FILE_ATTRIBUTE_TEMPORARY |
Файловые системы избегают писать данные обратно на запоминающее устройство большой емкости, если доступна достаточная кэш-память, потому что приложение часто удаляет временный файл вскоре после того, как дескриптор закрывается. В этом случае, система может полностью отменить запись данных. В противном случае, данные должны быть записаны после закрытия дескриптора. |
Этот параметр может включать в себя также и любую комбинацию нижеследующих флажков.
Флажок |
Предназначение |
FILE_FLAG_WRITE_THROUGH |
Предписывает системе не записывать через посредство какого-либо промежуточного кэша, а перейти непосредственно на диск. Если флажок FILE_FLAG_NO_BUFFERING также не определен, так, чтобы кэширование системы было в действительности, то данные записываются в системном КЭШе, но сбрасываются на диск без задержки. Если к тому же FILE_FLAG_NO_BUFFERING определен так, чтобы кэширование системы не действовало, то данные немедленно сбрасываются на диск, минуя системный кэш. Операционная система также требует сквозной записи через кэш жесткого диска для постоянных носителей информации. Однако, не все аппаратные средства поддерживают эту способность сквозной записи. |
FILE_FLAG_OVERLAPPED |
Файл открывается или создается для асинхронного ввода - вывода (I/O). Когда операция заканчивается, событие, определенное для вызова структуры OVERLAPPED устанавливается в сигнальное состояние. Операции, которые забирают значительное время для обработки данных возвращают значение ERROR_IO_PENDING. Если этот флажок устанавливается, файл может использоваться для совместных операций чтения и записи. Система не обслуживает указатель позиции в файле, поэтому Вы должны передавать позицию в файле в функции чтения и записи в структуре OVERLAPPED или обновлять указатель позиции в файле. Когда Вы устанавливаете флажок FILE_FLAG_OVERLAPPED, функции чтение и записи файла должныустановить структуру OVERLAPPED. То есть, когда определен флажок FILE_FLAG_OVERLAPPED , приложениедолжно исполнять перекрывающее (асинхронное) чтение и запись. Если этот флажок не определен, то операции ввода-вывода (I/O) преобразуются в последовательную форму, даже если функциям чтения и записи определяется вызов структуры OVERLAPPED. |
FILE_FLAG_NO_BUFFERING |
Система должна открыть файл без системного кэширования. Этот флажок не имеет никакого действия на кэширование жесткого диска. Когда объединяется с FILE_FLAG_OVERLAPPED, флажок дает максимальную асинхронную производительность, потому что ввод - вывод (I/O) не опирается на синхронные операции модуля управления памятью. Однако, некоторые операции ввода-вывода (I/O) забирают больше времени, потому что данные не поддерживаются в КЭШе. Притом, метаданные файла могут все же кэшироваться. Чтобы сбросить метаданные на диск, используйте функцию FlushFileBuffers. Приложение должно удовлетворять некоторым требованиям, когда работает с файлами открытыми при помощиFILE_FLAG_NO_BUFFERING:
* Примечание переводчика: том - логический раздел диска, создаваемый при его форматировании.
Одним из способов выравнивания буфера кратно размеру сектора тома, является использование функцииVirtualAlloc, которая назначает буфера. Она выделяет память, выровненную по адресам, которые являются кратными размеру страницы памяти операционной системы. Поскольку и страница памяти, и размеры сектора тома являются степенью 2, эта память также выравнивается по адресам, которые являются кратными размеру сектора тома. Приложение может выяснить размер сектора тома при помощи вызова функции GetDiskFreeSpace. |
FILE_FLAG_RANDOM_ACCESS |
Указывает на получение произвольного доступа к файлу. Система может использовать это как указание, чтобы оптимизировать кэширование файлов. |
FILE_FLAG_SEQUENTIAL_SCAN |
Указывает на получение последовательного доступа к файлу от начала до конца. Система может использовать это как указание, чтобы оптимизировать кэширование файлов. Если приложение перемещает указатель для произвольного доступа к файлу, оптимума кэширования может не произойти; однако, корректная операция все еще гарантируется. Установка этого флажка может увеличить производительность приложений, которые читают большие файлы, используя последовательный доступ. Прирост производительности может быть ещё более заметным для приложений, которые читают большие файлы главным образом последовательно, но иногда перескакивают на небольшие последовательности байтов. |
FILE_FLAG_DELETE_ON_CLOSE |
Система должна удалить файл немедленно после того, как все его дескрипторы были закрыты, не только заданный дескриптор, но также и любые другие открытые или дублированные дескрипторы. Если существуют открытые дескрипторы файлов, вызовы завершаются ошибкой, если они не были все открыты с режимом совместного доступа FILE_SHARE_DELETE . Последовательные запросы на открытие файла завершатся ошибкой, если не используется флажок режима совместного доступа FILE_SHARE_DELETE. |
FILE_FLAG_BACKUP_SEMANTICS |
Файл открывается или создается для операции восстановления, или резервного копирования. Система гарантирует, что вызывающий процесс отменяет проверку безопасности файла, обеспечивая его привилегиямиSE_BACKUP_NAME и SE_RESTORE_NAME. Подробную информацию, см. в статье Изменение привилегий в маркере. Вы можете также установить этот флажок, чтобы получить дескриптор каталога. Дескриптор каталога может передаваться некоторым функциям вместо дескриптора файла. Дополнительную информацию смотри в статьеПолучение дескриптора каталога. Windows Me/98/95: Этот флажок не поддерживается. |
FILE_FLAG_POSIX_SEMANTICS |
Указывает на получение доступа к файлу согласно правилам POSIX. Они включают разрешение нескольким файлам иметь имена, которые отличаются только регистром, если файловые системы поддерживают такое именование. Используйте осторожно этот параметр, потому что файлы, созданные с этим флажком не могут быть доступны приложениям, написанным для MS DOS или 16-битового Windows. |
FILE_FLAG_OPEN_REPARSE_POINT |
Система должна запретить режим работы монтирования в точках повторной обработки NTFS . Когда файл открывается, дескриптор файла возвращается, является ли фильтр, который управляет точкой монтирования, рабочим или нет. Этот флажок не может использоваться с флажком CREATE_ALWAYS. |
FILE_FLAG_OPEN_NO_RECALL |
Указывает, что требуются данные файла, но они должны продолжать постоянно находиться в удаленном хранилище. Они не должны переноситься обратно на локальное запоминающее устройство. Этот флажок предназначен для использования системами удаленных хранилищ. |
Если функция CreateFile открывает клиентскую сторону именованного канала, параметр dwFlagsAndAttributes может также содержать и информацию о Качестве службы системы безопасности. Подробную информацию см. в статье Уровни заимствования прав. Когда вызывающая программа устанавливает флажок SECURITY_SQOS_PRESENT, параметр dwFlagsAndAttributes может содержать одно или несколько нижеследующих значений.
Значение |
Предназначение |
SECURITY_ANONYMOUS |
Представляет клиента на Анонимном уровне заимствования прав. |
SECURITY_IDENTIFICATION |
Представляет клиента на Идентифицирующем уровне заимствования прав. |
SECURITY_IMPERSONATION |
Представляет клиента на Инперсонирующем* уровне заимствования прав. Примечание переводчика: инперсонация - выдача себя за кого-либо другого |
SECURITY_DELEGATION |
Представляет клиента на Делегирующем уровне заимствования прав. |
SECURITY_CONTEXT_TRACKING |
Отслеживающий режим системы безопасности является динамическим. Если этот флажок не установлен, отслеживающий режим системы безопасности, является статическим. |
SECURITY_EFFECTIVE_ONLY |
Серверу доступно содержание только разрешенное конфигурацией системы безопасности клиента. Если Вы не устанавливаете этот флажок, доступным становится содержание всех конфигураций системы безопасности клиента. Это дает возможность клиенту ограничивать группы и права доступа, которые сервер может использовать при исполнении роли клиента. |
hTemplateFile
[in] Дескриптор файла шаблона с правом доступа GENERIC_READ. Файл шаблона предоставляет атрибуты файла и дополнительные атрибуты для создающегося файла. Этот параметр должен быть ПУСТО (NULL).
При открытии существующего файла, CreateFile игнорирует файл шаблона.
Windows 95/98/Me: Параметр hTemplateFile должен иметь значение ПУСТО (NULL). Если Вы предоставляете дескриптор, вызов завершается ошибкой, а функция GetLastError возвращает значениеERROR_NOT_SUPPORTED.
Возвращаемые значения
Если функция завершается успешно, возвращаемое значение - открытый дескриптор заданного файла. Если заданный файл существовал до вызова функции, а параметр dwCreationDispositionустановлен в CREATE_ALWAYS или OPEN_ALWAYS, вызов GetLastError возвращает значение ERROR_ALREADY_EXISTS (даже при том, что функция завершилась успешно). Если файл не существовал перед вызовом функции, функция GetLastError возвращает нуль.
Если функция завершается с ошибкой, возвращаемое значение - INVALID_HANDLE_VALUE. Чтобы получать дополнительные сведения об ошибке, вызовите GetLastError.
Замечания
Используйте функцию CloseHandle, чтобы закрыть дескриптор объекта, возвращенный CreateFile.
Windows Server 2003, Windows XP, Windows 2000: Если, для удаления, делается попытка открыть файл или каталог на отдаленной машине, когда значение параметра dwDesiredAccess равно флажку доступа DELETE, который объединен при помощи логического ИЛИ (OR) с любым другим флажком доступа, а удаляемый файл или каталог не был открыт с флажком FILE_SHARE_DELETE, произойдет ошибка совместного доступа. Чтобы избежать ошибки совместного доступа в этом сценарии, откройте удаляемый файл или каталог с только правом доступа DELETE или, для удаления, вызовите функцию DeleteFile без первоначального открытия файла или каталога.
Некоторые файловые системы, такие как NTFS, поддерживают сжатие или шифрование для отдельных файлов и каталогов. В томах, отформатированных для такой файловой системы, новый файл наследует сжатие и атрибуты шифрования из своего каталога.
Вы не можете использовать CreateFile, чтобы управлять сжатием файла или каталога. Информацию о сжатых файлах и о разрешении или запрещении сжатия файла внутри каталога, см. разделе Сжатие файла и восстановление сжатых данных.
Дополнительную информацию о шифровании и расшифровке фалов и о разрешении или запрещении шифрования файла внутри каталога смотри в разделе Шифрование файла.
Windows Server 2003, Windows XP, Windows 2000: Для обеспечения совместимости вниз, функция CreateFile не применяет правила наследования, когда Вы определяете дескриптор безопасности вlpSecurityAttributes. Чтобы поддерживать наследование, функции, которые позже сделали запрос дескриптора безопасности этого объекта, могут эвристически определять и сообщать, что наследование действует. Дополнительную информацию см. в разделе Автоматическое распространение наследуемых элементов списка контроля доступа (ACE).
Windows 95/98/Me: CreateFileW поддерживается подпрограммой Microsoft Layer for Unicode. Чтобы использовать ее, Вы должны добавить некоторые файлы к вашему приложению, как изложено в описании Microsoft Layer for Unicode для системы Windows 95/98/Me.
Файлы
Если Вы пытаетесь создать файл в дисководе для гибких дискет или CD-ROM, в котором нет гибкого диска или CD-диска, система показывает на экране окно сообщений, запрашивающее пользователя вставить дискету или CD, соответственно. Чтобы воспрепятствовать системе показывать на экране это окно сообщений, вызовите функцию SetErrorMode с флажком SEM_FAILCRITICALERRORS.
Windows Server 2003, Windows XP, Windows 2000: Если установлены флажки CREATE_ALWAYS и FILE_ATTRIBUTE_NORMAL, функция CreateFile завершится ошибкой и установит последнюю ошибку в функции GetLastError как ACCESS_DENIED, если файл существует и имеет значение атрибутов FILE_ATTRIBUTE_HIDDEN и FILE_ATTRIBUTE_NORMAL. Чтобы избежать этой ошибки, установите некоторые атрибуты также как у существующего файла.
Перечень действий, которые совершает функция CreateFile при создании нового или открытии существующего файла смотри в статье Создание и открытие файлов
Windows NT/2000/XP: Если Вы переименовали или удалили файл, а затем, вскоре после этого, восстанавливайте его, чтобы восстановить файл система разыскивает кэш с информацией о файле. Кэшируемая информация включает в себя его короткую/длинную пару имен и время создания.
Windows Me/98/95: Это замечание не применяется.
Если Вы вызываете CreateFile для файла, который ожидает удаления в результате предыдущего вызова функции DeleteFile, функция завершается ошибкой. Операционная система задерживает удаление файла до тех пор, пока все дескрипторы файла не будут закрыты. GetLastError возвращает значение ERROR_ACCESS_DENIED.
Когда приложение создает файл через сеть, лучше использовать GENERIC_READ | GENERIC_WRITE чем использовать один флажок GENERIC_WRITE. Получающийся код должен быть быстрее, потому что система переадресации может использовать диспетчер кэша и отправлять меньше блоков серверных сообщений (SMB) с большим количеством данных. Эта комбинация также устраняет проблему, куда при записи в файл через сеть можно иногда возвращать значение ERROR_ACCESS_DENIED.
Каталоги
Приложение не сможет создать каталог при помощи функции CreateFile; чтобы создать каталог, оно должно вызвать функцию CreateDirectory или CreateDirectoryEx.
Windows NT/2000/XP: Вы можете получить дескриптор каталога, установив флажок FILE_FLAG_BACKUP_SEMANTICS. Дескриптор каталога может передаваться некоторым функциям вместо дескриптора файла.
Некоторые файловые системы, такая как NTFS, поддерживают сжатие или кодирование для отдельных файлов и каталогов. На томах, отформатированных для такой файловой системы, новый каталог наследует сжатие и атрибуты кодирования своей родительской директории.
Вы не можете использовать функцию CreateFile, чтобы установить сжатое состояние каталога. Используйте функцию DeviceIOControl, чтобы установить сжатое состояние каталога.
При использовании CreateFile, чтобы открыть каталог в ходе дефрагментации тома FAT или FAT32, не устанавливайте право доступа MAXIMUM_ALLOWED. Если это сделать, в доступе к каталогу будет отказано. Вместо него установите право доступа GENERIC_READ.
Каталоги
Приложение не сможет создать каталог при помощи функции CreateFile; чтобы создать каталог, оно должно вызвать функцию CreateDirectory или CreateDirectoryEx. Чтобы открыть каталог при помощи функции CreateFile требуется флажок FILE_FLAG_BACKUP_SEMANTICS.
При использовании CreateFile, чтобы открыть каталог в ходе дефрагментации тома FAT или FAT32, не устанавливайте право доступа MAXIMUM_ALLOWED. Если это сделать, в доступе к каталогу будет отказано. Вместо него установите право доступа GENERIC_READ.
Физические диски и тома
Вы можете использовать функцию CreateFile, чтобы открыть физический диск или том. Функция возвращает дескриптор, который может быть использован функцией DeviceIOControl. Это дает Вам возможность получить доступ к таблице разделов диска. Потенциально опасно делать так, потому что позже неправильная запись на диск может сделать его содержание недоступным. Ниже следуют требования, которые должны быть выполнены надлежащим образом для такого вызова, чтобы он завершился успешно:
Вызывающая программа должна иметь административные права доступа к операции. Подробную информацию, см. в статье Запуск со специальными правами доступа.
Параметр dwCreationDisposition должен иметь флажок OPEN_EXISTING.
При открытии гибкого диска или раздела на жестком диске, в параметре dwShareMode Вы должны установить флажок FILE_SHARE_WRITE.
Символьная строка lpFileName должна иметь форму \\.\PHYSICALDRIVE<x>, чтобы открыть физический диск x. Номера жестких дисков начинаются с нуля. Таблица ниже показывает некоторые примеры строк физических дисков.
Символьная строка |
Предназначение |
\\.\PHYSICALDRIVE0 |
Открывает первый физический диск. |
\\.\PHYSICALDRIVE2 |
Открывает третий физический диск. |
Пример, показывающий, как открыть физический диск, см. в статье Вызов функции DeviceIOControl.
При открытии тома или накопителя на гибких дисках, строка lpFileName должна иметь форму \\.\<x>:. Не используйте замыкающую наклонную черту влево(обратный слеш (\)). Это будет указывать на корневой каталог диска. Таблица ниже показывает некоторые примеры строк диска.
Символьная строка |
Предназначение |
\\.\A: |
Открывает диск А (гибкий диск). |
\\.\C: |
Открывает диск С (том). |
Вы можете также открыть том, ссылаясь на его имя. Подробную информации, см. в статье Именование тома.
Дескрипторы тома, по усмотрению файловой системы, могут открываться как некэшируемые даже тогда, когда некэшируемый параметр функцией CreateFile не определен. Вам следует исходить из того, что все файловые системы Microsoft открывают дескрипторы тома, как некэшируемые. Ограничения на некэшируемый ввод - вывод (I/O) для файлов также применяется и к томам.
Файловая система может или не может потребовать выравнивания буфера даже при том, что данные некэшируемые. Однако, если при открытии тома задается некэшируемый параметр, выравнивание буфера для тома осуществляется независимо от файловой системы. Это рекомендуется для всех файловых систем, в которых Вы открываете дескрипторы тома, как некэшируемые и сопровождается ограничениями некэшируемого ввода - вывода (I/O).
Накопители на магнитной ленте
Вы можете открыть накопители на магнитной ленте, используя форму имени файла \\.\TAPE<x>, где x - номер, указывающий, какое устройство открывается, начиная с накопителя на магнитной ленте 0. Чтобы открыть накопитель на магнитной ленте 0 в приложении написанном на C или С++, используйте имя файла "\\\\.\\TAPE0". Подробную информацию об управлении накопителями на магнитной ленте для резервного копирования или других приложений, см. главу Резервное копирование.
