Функция ReOpenFile (winbase.h)
Повторно открывает указанный объект файловой системы с разными правами доступа, режимом общего доступа и флагами.
Синтаксис
HANDLE ReOpenFile(
[in] HANDLE hOriginalFile,
[in] DWORD dwDesiredAccess,
[in] DWORD dwShareMode,
[in] DWORD dwFlagsAndAttributes
);
Параметры
[in] hOriginalFile
Дескриптор объекта для повторного открытия. Объект должен быть создан функцией CreateFile .
[in] dwDesiredAccess
Необходимый доступ к объекту . Список значений см. в разделе Безопасность файлов и права доступа. Невозможно запросить режим доступа, который конфликтует с режимом общего доступа, указанным в предыдущем открытом запросе, дескриптор которого по-прежнему открыт.
Если этот параметр равен нулю (0), приложение может запрашивать атрибуты устройства без доступа к устройству. Это полезно, если приложению требуется определить размер дисковода гибких дисков и поддерживаемые им форматы без необходимости использовать гибкие диски на диске.
[in] dwShareMode
Режим совместного использования объекта. Нельзя запросить режим общего доступа, который конфликтует с режимом доступа, указанным в предыдущем открытом запросе, дескриптор которого по-прежнему открыт.
Если этот параметр равен нулю (0) и createFile выполняется успешно, объект не может быть общим и не может быть открыт снова, пока дескриптор не будет закрыт.
Чтобы разрешить другим процессам совместно использовать объект, пока он открыт, используйте сочетание одного или нескольких из следующих значений, чтобы указать тип доступа, который они могут запрашивать при открытии объекта. Эти параметры общего доступа остаются в силе до тех пор, пока вы не закроете дескриптор для объекта .
[in] dwFlagsAndAttributes
Флаги файла. Этот параметр может иметь одно или несколько из следующих значений.
Значение | Значение |
---|---|
|
Указывает, что файл открывается или создается для резервного копирования или восстановления. Система гарантирует, что вызывающий процесс переопределяет проверки безопасности файлов при условии, что у него есть SE_BACKUP_NAME и SE_RESTORE_NAME привилегии. Дополнительные сведения см. в разделе Изменение привилегий в токене.
Этот флаг также можно задать, чтобы получить дескриптор каталога. Если указано, дескриптор каталога может быть передан некоторым функциям вместо дескриптора файла. |
|
Указывает, что операционная система удаляет файл сразу после закрытия всех его дескрипторов, а не только указанного дескриптора, но и любых других открытых или повторяющихся дескрипторов.
Последующие запросы открытия файла завершаются ошибкой, если не используется FILE_SHARE_DELETE . |
|
Указывает системе открыть файл без промежуточной буферизации или кэширования. В сочетании с FILE_FLAG_OVERLAPPED флаг обеспечивает максимальную асинхронную производительность, так как операции ввода-вывода не зависят от синхронных операций диспетчера памяти. Однако некоторые операции ввода-вывода выполняются дольше, так как данные не хранятся в кэше.
Приложение должно соответствовать определенным требованиям при работе с файлами, открытыми с помощью FILE_FLAG_NO_BUFFERING:
Приложение может определить размер сектора тома, вызвав функцию GetDiskFreeSpace . |
|
Указывает, что данные файла запрошены, но они должны по-прежнему находиться в удаленном хранилище. Его не следует переносить обратно в локальное хранилище. Этот флаг предназначен для использования системами удаленного хранения. |
|
При использовании этого флага обычная обработка точек повторного определения не выполняется, и ReOpenFile пытается открыть точку повторного обработки. При открытии файла возвращается дескриптор файла, независимо от того, работает ли фильтр, управляющий точкой повторного определения. Этот флаг нельзя использовать с флагом CREATE_ALWAYS . Если файл не является точкой повторного извлечения, этот флаг игнорируется. |
|
Указывает системе инициализировать объект, чтобы операции, требующие значительного количества времени, обрабатывали возврат ERROR_IO_PENDING. После завершения операции для указанного события устанавливается состояние сигнала.
При указании FILE_FLAG_OVERLAPPED функции чтения и записи файлов должны указывать структуру OVERLAPPED . То есть при указании FILE_FLAG_OVERLAPPED приложение должно выполнять перекрывающиеся операции чтения и записи. Если указан FILE_FLAG_OVERLAPPED , система не поддерживает указатель на файл. Положение файла должно передаваться как часть параметра lpOverlapped (указывающего на структуру OVERLAPPED ) в функции чтения и записи файла. Этот флаг также позволяет выполнять несколько операций одновременно с дескриптором (например, одновременную операцию чтения и записи). |
|
Указывает, что доступ к файлу должен осуществляться в соответствии с правилами POSIX. Это включает в себя разрешение нескольких файлов с именами, отличающимися только в случае, для файловой системы, поддерживающей такое именование. Будьте внимательны при использовании этого параметра, так как файлы, созданные с этим флагом, могут быть недоступны приложениям, написанным для MS-DOS или 16-разрядной версии Windows. |
|
Указывается, что доступ к файлу осуществляется произвольно. Система может использовать это в качестве указания для оптимизации кэширования файлов. |
|
Указывает, что доступ к файлу осуществляется последовательно от начала к концу. Система может использовать это в качестве указания для оптимизации кэширования файлов. Если в приложении указатель позиции в файле перемещается для произвольного доступа, оптимального кэширования можно не достигнуть, однако правильная работа гарантируется.
Указание этого флага может повысить производительность приложений, которые считывают большие файлы с помощью последовательного доступа. Повышение производительности может быть еще более заметным для приложений, которые считывают большие файлы в основном последовательно, но иногда пропускают небольшие диапазоны байтов. |
|
Указывает системе выполнить запись через любой промежуточный кэш и перейти непосредственно на диск. Система по-прежнему может кэшировать операции записи, но не может отложенно их очистить. |
Если дескриптор представляет клиент именованного канала, параметр dwFlags также может содержать сведения о качестве обслуживания системы безопасности. Дополнительные сведения см. в разделе Уровни олицетворения. Если вызывающее приложение задает флаг SECURITY_SQOS_PRESENT , параметр dwFlags может содержать одно или несколько из следующих значений.
Возвращаемое значение
Если функция выполняется успешно, возвращаемое значение является открытым дескриптором для указанного файла.
Если функция завершается неудачно, возвращается значение INVALID_HANDLE_VALUE. Дополнительные сведения об ошибке можно получить, вызвав GetLastError.
Комментарии
Параметр dwFlags не может содержать флаги атрибутов файла (FILE_ATTRIBUTE_*). Их можно указать только при создании файла.
В Windows 8 и Windows Server 2012 эта функция поддерживается следующими технологиями.
Технология | Поддерживается |
---|---|
Протокол SMB 3.0 | Да |
Прозрачная отработка отказа (TFO) SMB 3.0 | Да |
SMB 3.0 с масштабируемыми общими папками (SO) | Да |
Файловая система общего тома кластера (CSVFS) | Да |
Восстанавливаемая файловая система (ReFS) | Да |
Требования
Минимальная версия клиента | Windows Vista [только классические приложения] |
Минимальная версия сервера | Windows Server 2003 [только классические приложения] |
Целевая платформа | Windows |
Header | winbase.h (включая Windows.h) |
Библиотека | Kernel32.lib |
DLL | Kernel32.dll |