Функция ReOpenFile


Функция ReOpenFile повторно открывает указанный объект файловой системы с различными правами доступа, режимом совместного доступа и флажками.

Синтаксис

HANDLE ReOpenFile(
  HANDLE hOriginalFile,
  DWORD dwDesiredAccess,
  DWORD dwShareMode,
  DWORD dwFlags
);

Параметры

hOriginalFile
[in] Дескриптор объекта, который повторно открывается. Объект должен быть создан функцией CreateFile.
dwDesiredAccess
[in] Доступ к объекту. Список значений, см.  в статье Защита файла и права доступа. Вы не можете запросить режим доступа, который находится в противоречии с режимом совместного доступа, заданным в предыдущем запросе открытия, дескриптор которого является все еще открытым.

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

dwShareMode
[in] Режим совместного доступа использования объекта. Вы не можете запросить режим совместного доступа, который находится в противоречии с режимом доступа, заданным в предыдущем запросе открытия, дескриптор которого является все еще открытым.

Если этот параметр равняется нулю, а 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

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

Один из способов выравнивания буфера по целому числу, кратному размеру сектора тома состоит в том, чтобы использовать функцию 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

-

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

Не имеется

 

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

Hosted by uCoz