Функция ReOpenFile повторно открывает указанный объект файловой системы с различными правами доступа, режимом совместного доступа и флажками.
Синтаксис
HANDLE ReOpenFile( HANDLE hOriginalFile, DWORD dwDesiredAccess, DWORD dwShareMode, DWORD dwFlags ); |
Параметры
Если этот параметр равняется нулю, прикладная программа может сделать запрос атрибутов устройства, не обращаясь к устройству. Это применяется в том случае, если приложение хочет выяснить размер дискеты и форматы, которые устройство поддерживает, не требуя гибкого диска в дисководе.
Если этот параметр равняется нулю, а CreateFile завершается успешно, объект не может совместно использоваться и не может открыться снова до тех пор, пока дескриптор не закроется.
Чтобы дать возможность другим процессам совместно использовать объект, в то время, когда ваш процесс открыл его, используйте комбинацию из одного или нескольких нижеследующих значений, чтобы определить тип доступа, который они могут запросить, когда открывают объект. Эти варианты совместного использования остаются в силе до тех пор, пока Вы не закроете дескриптор объекта.
Значение | Предназначение |
---|---|
FILE_SHARE_DELETE | Дает
возможность для последовательных
операций открытия объекта с запросом доступа
к удалению (объекта). В противном
случае, другие процессы не смогут открыть объект, если они
запрашивают доступ
к удалению.
Если объект уже был открыт с доступом к удалению, режим совместного использования должен включать в себя этот флажок. |
FILE_SHARE_READ | Дает
возможность для последовательных
операций открытия объекта с запросом доступа
к чтению. В противном
случае, другие процессы не с
могут открыть объект, если они
запрашивают доступ
к чтению.
Если объект уже был открыт с доступом к чтению, режим совместного использования должен включать в себя этот флажок. |
FILE_SHARE_WRITE | Дает
возможность для последовательных
операций открытия объекта с запросом доступа
к запросу. В противном
случае, другие процессы не с
могут открыть объект, если они
запрашивают доступ
к записи.
Если объект уже был открыт с доступом к записи, режим совместного использования должен включать в себя этот флажок. |
dwFlags
[in] Флажки файла. Этот параметр может состоять из одного или нескольких ниже перечисленных значений.Флажок | Значение |
---|---|
FILE_FLAG_BACKUP_SEMANTICS | Указывает, что файл
открывается или создается для
операции восстановления или
резервного копирования. Система
гарантирует, что вызывающий процесс
отменяет проверку защиты файла, если
он имеет привилегии SE_BACKUP_NAME и
SE_RESTORE_NAME. Дополнительную информацию,
см. в статье Изменение привилегий в
маркере.
Вы можете также установит этот флажок, чтобы получить дескриптор каталога. Тогда он указывает, что дескриптор каталога может быть передан в некоторые функции вместо дескриптора файла. |
FILE_FLAG_DELETE_ON_CLOSE | Указывает, что
операционная система должна удалить
файл немедленно после того, как все
его дескрипторы были закрыты, не
только указанный дескриптор, но
также и любые другие открытые или
дублированные дескрипторы. Последовательные запросы открытия для файла завершатся ошибкой, если не используется FILE_SHARE_DELETE. |
FILE_FLAG_NO_BUFFERING | Предписывает системе
открыть файл без промежуточного
звена буферизации или кэширования.
Когда он объединен с FILE_FLAG_OVERLAPPED, то
флажок дает максимальную
асинхронную производительность,
потому что ввод - вывод (I/O) не зависит
от синхронных операций модуля
управления памятью. Однако,
некоторые операции ввода-вывода (I/O)
берут больше времени, потому что
данные не сохранялись в кэше.
Приложение должно соответствовать некоторым требованиям при работе с файлами, открытыми с FILE_FLAG_NO_BUFFERING:
Один из способов выравнивания буфера по целому числу, кратному размеру сектора тома состоит в том, чтобы использовать функцию VirtualAlloc, которая назначит буфера. Она распределяет память, выравниваемую по адресам, которые являются целыми числами, кратными размеру страницы памяти операционной системы. Поскольку и страница памяти, и размеры сектора тома - степени 2, эта память является также выровненной по адресам, которые являются целым числом, кратным размеру сектора тома. Приложение может выяснить размер сектора тома при помощи вызова функции GetDiskFreeSpace. |
FILE_FLAG_OPEN_NO_RECALL | Указывает, что данные файла затребованы, но они должны продолжать находиться в удаленном хранилище. Они не должны перемещаться назад на локальное запоминающее устройство. Этот флажок предназначается для использования системами удаленного хранилища (RSS). |
FILE_FLAG_OPEN_REPARSE_POINT | Установка этого флажка запрещает режим монтирования точек повторной обработки (reparse points) NTFS. Когда файл открывается, дескриптор файла возвращает значение, указывающее является ли фильтр, который управляет точкой повторной обработки, эксплуатационным или нет. Этот флажок не может использоваться с флажком CREATE_ALWAYS. |
FILE_FLAG_OVERLAPPED | Предписывает системе,
чтобы инициализировать объект так,
чтобы операции, которые забирают
значительное время обработки ее,
возвращали значение ERROR_IO_PENDING. Когда
операция заканчивается, указанное
событие устанавливается в
сигнальное состояние.
Когда Вы устанавливаете флажок FILE_FLAG_OVERLAPPED, функции чтения и записи файла должны определить структуру OVERLAPPED. То есть когда устанавливается FILE_FLAG_OVERLAPPED, приложение должно выполнить асинхронное чтение и запись. Когда устанавливается FILE_FLAG_OVERLAPPED, система не обслуживает указатель позиции в файле. Позиция в файле должна передаваться как часть параметра lpOverlapped (указывающего на структуру OVERLAPPED) в функции записи и чтения файла. Этот флажок дает также возможность одновременно с дескриптором выполняться больше чем одной операции (например, операция чтения и записи). |
FILE_FLAG_POSIX_SEMANTICS | Указывает, что доступ к файлу должен быть получен согласно правилам POSIX. Это позволяет включать в себя файлы с несколькими именами, которые отличаются только в том случае, если файловая система, поддерживают такое именование. Проявляйте осторожность, когда используете этот параметр, потому что файлы, созданные с этим флажком не могут быть доступны приложениям написанными для MS DOS или 16-разрядного Windows. |
FILE_FLAG_RANDOM_ACCESS | Указывает, что доступ к файлу получается случайно. Система может использовать флажок как указание, чтобы оптимизировать кэширование файла. |
FILE_FLAG_SEQUENTIAL_SCAN | Указывает, что
файл доступен последовательно от
начала до конца. Система может
использовать это, как указание, чтобы
оптимизировать кэширование файла.
Если приложение перемещает
указатель позиции в файле для
произвольного доступа, оптимизация
кэширования не может произойти;
однако, корректная операция тем не
менее гарантируется.
Установка этого флажка может увеличить производительность прикладных программ, которые читают большие файлы, используя последовательный доступ. Рост производительности может быть еще более заметной для приложений, которые читают большие файлы главным образом последовательно, но иногда перескакивают через маленькие блоки байтов. |
FILE_FLAG_WRITE_THROUGH | Предписывает системе записывать через посредство какого-либо промежуточного КЭШа и идти непосредственно на диск. Система может тем не менее кэшировать операции записи, но не может вяло сбросить их. |
Если дескриптор представляет клиентскую сторону именованного канала, параметр dwFlags может также содержать информацию о Службе качества защиты (Security Quality of Service). Дополнительную информацию, см. в статье Уровни заимствования прав. Когда вызывающая программа устанавливает флажок SECURITY_SQOS_PRESENT, параметр dwFlags может содержать одно или несколько нижеследующих значений.
Значение | Предназначение |
---|---|
SECURITY_ANONYMOUS | Исполняет роль роль компьютера - клиента на Анонимном уровне заимствования прав. |
SECURITY_CONTEXT_TRACKING | Устанавливаемый режим защиты является динамическим. Если этот флажок не определен, устанавливаемый режим защиты является статическим. |
SECURITY_DELEGATION | Исполняет роль компьютера - клиента на уровне Делегирования заимствования прав. |
SECURITY_EFFECTIVE_ONLY | Разрешаются
только доступные серверу аспекты
контекста защиты компьютера -
клиента. Если Вы не устанавливаете
этот флажок, то доступны все аспекты
контекста защиты компьютера -
клиента.
Это дает возможность компьютеру - клиенту ограничивать группы и привилегии, которые сервер может использовать в то время, когда исполняет роль компьютера - клиента. |
SECURITY_IDENTIFICATION | Исполняет роль компьютера - клиента на Идентификационном уровне заимствования прав. |
SECURITY_IMPERSONATION | Исполняет роль компьютера - клиента на уровне Имитирования заимствования прав . |
Возвращаемые значения
Если функция завершается успешно, возвращаемое значение - открытый дескриптор заданного файла.
Если функция завершается ошибкой, возвращаемое значение - INVALID_HANDLE_VALUE. Чтобы получить дополнительную информацию об ошибке, вызовите GetLastError.
Замечания
Параметр dwFlags не может содержать какой - либо из из флажков атрибутов файла (FILE_ATTRIBUTE_ *). Они могут задаваться только тогда, когда файл создается.
Чтобы компилировать приложение, которое использует эту функцию, определите макрос _WIN32_WINNT как 0x0502 или позже. Дополнительную информацию, см. в статье Использование заголовочных файлов SDK.
Смотри также
Обзор Управление файлами, Функции, используемые в управлении файлами, CreateFile
Размещение и совместимость ReOpenFile |
||
К |
Windows XP |
Нет |
л |
Windows 2000 |
Нет |
и |
Windows NT |
Нет |
е |
Windows Me |
Нет |
н |
Windows 98 |
Нет |
т |
Windows 95 |
Нет |
С |
Windows Server 2003 |
Да |
е | Windows 2000 Server | Нет |
р | Windows NT Server | Нет |
в | ||
е | ||
р | ||
Используемая библиотека |
Kernel32.lib |
|
Используемая DLL | - | |
Заголовочный файл | ||
- объявлено в |
Winbase.h |
|
- включено в |
Windows.h |
|
Unicode |
- |
|
Замечания по платформе |
Не имеется |