Функция 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:

  • Доступ к файлу должен начинаться при смещениях байтов в пределах файла, которые являются кратными размеру сектора  тома*.

* Примечание переводчика: том - логический раздел диска, создаваемый при его форматировании.

  • Доступ к файлу должен быть равен числу байтов, которые являются кратными размеру сектора тома. Например, если размер сектора - 512 байтов, приложение может запросить чтение и запись  512, 1024, или 2048 байтов, а не 335, 981 или 7171 байтов.
  • Адреса буферов для операций чтения и записи должны быть выровнены по сектору (выровнены по адресам в памяти, которые являются кратными размеру сектора тома). В зависимости от диска, это требование  может быть не реализовано.

Одним из способов выравнивания буфера кратно размеру сектора тома, является использование функции 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". Подробную информацию об управлении накопителями на магнитной ленте для резервного копирования или других приложений, см. главу Резервное копирование.

Коммуникационные ресурсы

Функция CreateFile может создать дескриптор коммуникационного ресурса (обмена данными), такого как последовательный порт COM1. Для коммуникационных ресурсов параметр dwCreationDisposition  должен быть OPEN_EXISTING, а параметр hTemplate должен иметь значение ПУСТО (NULL).  Доступ к операциям чтения, записи или чтения-записи может быть определен, а дескриптор может открыться для асинхронной операции ввода-вывода. Дополнительную информацию об обмене информацией, см. раздел Коммуникационные ресурсы.

Консоли

Функция CreateFile может создать дескриптор консольного ввода данных (CONIN$). Если процесс имеет открытый дескриптор для него, как результат наследования или дублирования, он может также создать и дескриптор активного экранного буфера (CONOUT$). Вызывающий процесс должен быть присоединен к унаследованной консоли или консоли назначенной функцией AllocConsole. Дескрипторы консоли, устанавливаются в параметрах CreateFile как указано ниже.

Параметры Значение
lpFileName Используйте значение CONIN$, чтобы определить консольный ввод данных, а значение CONOUT$, чтобы определить консольный вывод данных.

CONIN$ получает дескриптор буфера консольного ввода данных, даже если функция SetStdHandle переназначала дескриптор стандартного ввода данных. Чтобы получить дескриптор стандартного ввода данных, используйте функцию GetStdHandle.

CONOUT$ получает дескриптор активного экранного буфера, даже если функция  SetStdHandle переназначала дескриптор стандартного вывода данных. Чтобы получить дескриптор стандартного вывода данных, используйте функцию GetStdHandle.
dwDesiredAccess Предпочитается сочетание флажков GENERIC_READ | GENERIC_WRITE , но либо один, либо другой может ограничить доступ.
dwShareMode Когда открываете CONIN$, убедитесь, что определили доступ FILE_SHARE_READ. Когда открываете CONOUT$, убедитесь, что определили доступ FILE_SHARE_WRITE.

Если вызывающий процесс унаследовал консоль, или если дочерний процесс получил возможность обратиться к консоли, этим параметром должно быть сочетание флажков  FILE_SHARE_READ | FILE_SHARE_WRITE.

lpSecurityAttributes Если Вы хотите чтобы была унаследована консоль, член bInheritHandle структуры SECURITY_ATTRIBUTES должен иметь значение ИСТИНА (TRUE).
dwCreationDisposition При использовании функции CreateFile, чтобы открыть консоль, Вы должны установить флажок OPEN_EXISTING.
dwFlagsAndAttributes Игнорируется.
hTemplateFile Игнорируется.

Список ниже показывает воздействие  различных настроек параметров  dwDesiredAccess и lpFileName.

lpFileName dwDesiredAccess Результат воздействия
CON GENERIC_READ Открывает консоль для ввода данных.
CON GENERIC_WRITE Открывает консоль для вывода данных.
CON GENERIC_READ
GENERIC_WRITE
Windows 95/98/Me: Становится причиной завершения ошибкой работы функции CreateFile; функция GetLastError возвращает код ошибки ERROR_PATH_NOT_FOUND.

Windows NT/2000/XP: Становится причиной завершения ошибкой работы функции CreateFile; функция GetLastError возвращает код ошибки ERROR_FILE_NOT_FOUND.

 

Обменный почтовый ящик в ядре Windows

Если CreateFile открывает клиентский конец обменного почтового ящика (слота), функция возвращает значение INVALID_HANDLE_VALUE, если клиент почтового слота  пытается открыть локальный почтовый слот прежде, чем сервер почтового слота создаст его при помощи функции CreateMailSlot. Подробную информацию о почтовых ящиках в ядре Windows, см. Обменные почтовые ящики в ядре Windows.

Каналы

Если CreateFile открывает клиентский конец именованного канала, функция использует любой экземпляр именованного канала, который находится в  состоянии прослушивания. Процесс открытия может дублировать дескриптор столько раз, сколько этого требуется, но, как только откроется, этот экземпляр именованного канала не может открыться другим клиентом. Доступ определяется таким, чтобы  когда канал открывается, то должен быть совместим с доступом, заданным в параметре dwOpenMode  функции CreateNamedPipe. Подробную информацию о каналах, см. в главе Каналы.

Код примера

Пример смотри в статье Создание и открытие файлов.

Смотри также 

Обзор Управление файламиФункции, используемые в управлении файлами, ACCESS_MASK,  AllocConsole, CloseHandle, ConnectNamedPipe,  CreateDirectory, CreateDirectoryEx, CreateMailSlot, CreateNamedPipe, DeleteFile, DeviceIOControl, GetDiskFreeSpace, GetOverlappedResult, GetStdHandle, OpenFile, OVERLAPPED, ReadFile, SECURITY_ATTRIBUTES, SetErrorMode, SetStdHandle, TransactNamedPipe, VirtualAlloc, WriteFile

Размещение и совместимость CreateFile

К

Windows XP

Да 

л

Windows 2000 Professional

Да

и

Windows NT Workstation

Да

е

Windows Me

Да

н

Windows 98

Да

т

Windows 95

Да

 
С

Windows Server 2003

Да

е Windows 2000 Server Да
р Windows NT Server Да
в    
е    
р    

Используемая библиотека

Kernel32.lib

Используемая DLL -
 Заголовочный файл  

- объявлено в

Winbase.h

 - включено в

Windows.h

 Unicode

Реализуется как версии Unicode и  ANSI для Windows 2000/XP. Обратите внимание на то, что поддержка в Windows Me/98/95 требует программы Microsoft Layer for Unicode.

 Замечания по платформе

Не имеется

 

Назад в оглавление
На главную страницу
На оглавление справки

Hosted by uCoz