Функция CreateFile создает или открывает файл, файловый поток, директорию, физический диск, раздел, буфер консоли, ресурсы коммуникаций, слот почты или именованный канал.
Windows Me/98/95: Файловая система ограничивает CreateFile в создании или открытии файлов. Вы не можете создавать или открывать объекты, которые перечисленны в первом параграфе этого описания.
Windows Me/98/95: Файловая система ограничивает CreateFile в создании или открытии файлов. Вы не можете создавать или открывать объекты, которые перечисленны в первом параграфе этого описания.
HANDLE CreateFile (
LPCTSTR lpFileName ,
DWORD dwDesiredAccess ,
DWORD dwShareMode ,
LPSECURITY_ATTRIBUTES lpSecurityAttributes ,
DWORD dwCreationDisposition ,
DWORD dwFlagsAndAttributes ,
HANDLE hTemplateFile
);
Параметры:
Адрес нульзаканчивающейся строки, которая определяет имя объекта для его создания или открытия. В ANSI-версии этой функции, имя ограничено количеством MAX_PATH символов. Для увеличения этого предела до 32767 расширенных символов, используйте Unicode-версию этой функции и добавив к пути "\\?\". Для создания файлового потока, задайте имя файла, двоеточие, и затем имя потока. Windows Me/98/95: Эта строка не может превышать MAX_PATH символов. | |||||||||||||
Тип досупа к объекту. Данный параметр может принимать любую комбинацию из следующих значений:
| |||||||||||||
Режим разделяемого доступа к объекту. При нулевом значеним объект не может быть использован совместно несколькими программами. Все последующие операции открытия объекта будут терпеть неудачу, пока дескриптор объекта не будет закрыт. Для совместного использования объекта используйте комбинацию следующих значений:
| |||||||||||||
Адрес структуры SECURITY_ATTRIBUTES, которая определяет может или нет возвращаемый функцией дескриптор быть унаследован дочерним процессом. Если lpSecurityAttributes равен NULL, то дескриптор не может быть унаследован. Член lpSecurityDescriptor структуры определяет дескриптор безопасности для объекта. Если lpSecurityAttributes равен NULL, объект получает дескриптор безопасности по умолчанию. Список контроля доступа (ACL) в дескриптор безопасности по умолчанию для файла или дериктории наследуется от родительской директории. Целевая файловая система должна поддерживать безопасность файлов и директорий для того, чтоб этот параметр имел эффект на них, который проявляется когда GetVolumeInformation возвращая FS_PERSISTENT_ACLS. CreateFile игнорирует lpSecurityDescriptor когда открывает существующий файл, но продолжает использовать другие члены структуры. | |||||||||||||
| |||||||||||||
Флаги и атрибуты файла. Этот параметр может содержать любую комбинацию файловых атрибутов. Все другие файловые атрибуты перезаписывают FILE_ATTRIBUTE_NORMAL. Когда CreateFile открывает файл, атрибуты файла комбинируются с существующими атрибутами файла, и игнорируются любые запрошенные файловые атрибуты. Следующие файловые атрибуты и флаги используются только для файловых объектов, а не для других типов объектов, которые создает CreateFile. - Файл может быть заархивирован. Приложение использует этот атрибут для пометки файлов для резервного копирования или перемещения. - Фал или дериктория зашифрованы. Для файла, это означает, что все данные в файле зашифрованы. Для директории, это означает, что шифрование применяется по умолчанию для новосозданных файлов и поддиректорий. Этот флаг не имеет эффекта, если также установлен FILE_ATTRIBUTE_SYSTEM. - Файл спрятан (скрыт). - Файл не имеет других установленных атрибутов. Этот атрибут действителен, если он установлен одним. - Файл не индексируется контекстом сервиса индексирования. - Данные файла не являются немедленно достижимыми. Этот атрибут указывает, что данные файла физически перемещены на внешнее хранилище. Приложение не может произвольно изменять этот атрибут. - Файл только для чтения. Приложение может читать из файла, но не может записываеть в него, или его удалить. - Файл – это часть или используется исключительно операционной системой. - Файл будет использован для временного хранения. Файловая система избегает записи данных назад в хранилище, если имеется в распоряжении достаточно кэша, потому что приложение удаляет временный файл после того, как дескриптор закрывается. В этом случае, система может всецело избежать записи данных. В другом случае, данные записываются после закрытия дескриптора. Этот параметр может также содержать любую комбинацию следующих флагов: - Файл будет открыт или создан для операции резервного сохранения или восстановления. Система гарантирует, что вызывающий процесс не принимает во внимание проверку безопасности файла, когда процесс имеет привилегии SE_BACKUP_NAME и SE_RESTORE_NAME. Вы можете установить этот флаг, получив дескриптор директории. Дескриптор директории может быть передан некоторым функциям вместо файлового дескриптора. Windows Me/98/95: Этот флаг не поддерживается. - Система удаляет файл сразу, когда все его дескрипторы будут закрыты, учитывая указанный дескриптор и любые откртые или скопированные дескрипторы. Если существует открытые дескриптор файла, вызов функции будет не успешен, если только они (дескрипторы) не имеют режим разделяемости FILE_SHARE_DELETE. Последовательные запросы на открытие для файла будут неудачны, если не указан режим разделяемости FILE_SHARE_DELETE. - Система открывает файл без системного кэширования. Этот флаг не эффективен в кэшировании жесткого диска. Если он комбинирован с FILE_FLAG_OVERLAPPED, флаг дает максимальную производительность ассинхронности потому, что вв/выв не полагается на синхронные операции менеджера памяти. Тем не менее, некоторые операции вв/выв забирают больше времени потому, что данные не сохранены в кэше. Также, метаданные файла могут все еще кэшироваться. Для сброса метаданных на диск, используйте функцию FlushFileBuffers. Приложение должно удовлевотворять определенным условиям когда работает с файлами, открытыми с флагом FILE_FLAG_NO_BUFFERING:
Приложение может получить размер сектора раздела, вызвав функцию GetDiskFreeSpace. - Данные файла были затребованы, но должно продолжаться их устраивание на удаленном хранилище. Этот флаг для использования системой удаленного хранения. - Система препятствует поведению возмещения файлововой системы NTFS точек препятствия. Этот флаг не может использоваться с флагом CREATE_ALWAYS. - Файл будет открыт или создан для ассинхронного вв/выв. Когда операция завершена, событие указанное к вызову в структуре OVERLAPPED, устанавливается в сигнальное состояние. Операции, которые требуют много количества времени процессу, возвращают ERROR_IO_PENDING. Если указан этот флаг, файл может быть использован для одновременных операций чтения и записи. Система не изменяет файловый указатель – вы сами должны это делать, передавая файловую позицию к функциям чтения и записи в структуре OVERLAPPED, или обновлять файловый указатель. Если этот флаг не указан, тогда операции вв/выв являются серийными, даже если в вызовах функций чтения и записи определена структура OVERLAPPED. - Доступ к файлу осуществляется по правилам POSIX. При этом учитывается регистр символов в имени файла, для файловых систем, которые учитывают такие имена. Используйте с осторожностью эту опцию потому, что создание файлов с этим флагом может быть не доступно приложениям, которые написаны для MS-DOS или 16-битного Windows. - Доступ к файлу непоследователен. Система может использовать это как подсказку при кэшировании файла. - Доступ к файлу последователен от начала до конца. Система может использовать это как подсказку при кэшировании файла. Если приложение передвигает файловый указатель для произвольного доступа, оптимальное кэширование не происходит. Тем не менее, корректность операции гарантируется. Установив этот флаг, можно подвысить производительность приложения, которое последовательно читает большие файлы. - Система записывает мимо любого промежуточного кэша прямо на диск. Если также установлен флаг FILE_FLAG_NO_BUFFERING, систеное кэширование эффективно так, что данные записываются в системный кэш, но сбрасываются на диск без замедления. Параметр dwFlagsAndAttributes может также содержать Качества Безопасности. Когда вызывающее приложение определяет флаг SECURITY_SQOS_PRESENT, параметр dwFlagsAndAttributes может принимать одно или более из следующих значений: - Испольнять роль клиента в уровне анонимности. - Режим выслеживания безопасности динамичен. Если этот флаг не указан, режим выслеживания безопасности статичен. - Испольнять роль клиента в уровне делегации. - Допустить только аспекты контекста безопасности клиента допустимыми на сервере. Если вы не устанавливаете этот флаг, все аспекты контекста безопасности клиента доступны. Это позволяет клинету ограничивать группы и привилегии, которы сервер может использовать исполняющий роль клиента. - Испольнять роль клиента в уровне опознавания. - Испольнять роль клиента в уровне испольняющего роль. | |||||||||||||
Дескриптор файла-шаблона с правами доступа GENERIC_READ. У Файла-шаблона запрашиваются атрибуты файла и расширенные атрибуты для файла, который будет создан. Этот параметр может быть NULL. Когда открывается существующий файл, то CreateFile игнорирует файл-шаблон. Windows Me/98/95: hTemplateFile должен быть равен NULL. Если вы указываете дескриптор, вызов функции будет завершен с ошибкой и GetLastError вернет ERROR_NOT_SUPPORTED. |
Возвращаемые значения:
Если функция успешна, возвращается открытый дескриптор указанного файла. Если указанный файл существует до вызова функции и параметр dwCreationDisposition равен CREATE_ALWAYS или OPEN_ALWAYS, вызов GetLastError вернет ERROR_ALREADY_EXISTS, даже если функция успешна. Если файл не существует перед вызовом, GetLastError вернет 0 (ноль).
При ошибке, функция вернет INVALID_HANDLE_VALUE. Для получения дополнительной информации об ошибке, вызывайте GetLastError.
При ошибке, функция вернет INVALID_HANDLE_VALUE. Для получения дополнительной информации об ошибке, вызывайте GetLastError.
Замечания:
Используйте функцию CloseHandle для закрытия дескриптора объекта, который возвращает CreateFile.
Windows Server 2003 и Windows XP/2000: Разделяемое нарушение происходит при попытке открытия файла или директории для удаления на удаленном компьютере, когда значение параметра dwDesiredAccess имеет флаг для доступа на удаление и удаленный компьютер не был открыт с FILE_SHARE_DELETE. Для избежания разделяемого нарушения по этому сценарию, откройте удаленный файл или директорию только с провами доступа на удалени, или вызовите DeleteFile без предыдущего открытия файла.
Некоторые файловые системы, такие как NTFS, поддерживают сжатие или шифрование для индувидуальных файлов и директорий. На разделах, которые отформатированы для таких типов файловых систем, новый файл наследует атрибуты сжатия и шифрования этой директории.
Вы не можете использовать CreateFile для контроля над сжатием файлов или директорий.
Windows Server 2003 and Windows XP/2000: Для возможности обратной совместительности, CreateFile не осуществляет правила наследования, когда вы указываете дескриптор безопасности в lpSecurityAttributes. Для поддержки наследования, функция, которая позже запрашивает дескриптор безопасности этого объекта, может иерархично получить и отчитаться о том, имеет ли эффектность наследование.
Windows Server 2003 и Windows XP/2000: Разделяемое нарушение происходит при попытке открытия файла или директории для удаления на удаленном компьютере, когда значение параметра dwDesiredAccess имеет флаг для доступа на удаление и удаленный компьютер не был открыт с FILE_SHARE_DELETE. Для избежания разделяемого нарушения по этому сценарию, откройте удаленный файл или директорию только с провами доступа на удалени, или вызовите DeleteFile без предыдущего открытия файла.
Некоторые файловые системы, такие как NTFS, поддерживают сжатие или шифрование для индувидуальных файлов и директорий. На разделах, которые отформатированы для таких типов файловых систем, новый файл наследует атрибуты сжатия и шифрования этой директории.
Вы не можете использовать CreateFile для контроля над сжатием файлов или директорий.
Windows Server 2003 and Windows XP/2000: Для возможности обратной совместительности, CreateFile не осуществляет правила наследования, когда вы указываете дескриптор безопасности в lpSecurityAttributes. Для поддержки наследования, функция, которая позже запрашивает дескриптор безопасности этого объекта, может иерархично получить и отчитаться о том, имеет ли эффектность наследование.
Смотрите также:
ACCESS_MASK, AllocConsole, CloseHandle, ConnectNamedPipe, CreateDirectory, CreateDirectoryEx, CreateMailSlot, CreateNamedPipe, DeleteFile, DeviceIoControl, GetDiskFreeSpace, GetOverlappedResult, GetStdHandle, OpenFile, OVERLAPPED, ReadFile, SECURITY_ATTRIBUTES, SetErrorMode, SetStdHandle, TransactNamedPipe, VirtualAlloc, WriteFile