Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Флаги для запроса различных разрешений на открытие файла.
Синтаксис
typedef enum CF_OPEN_FILE_FLAGS {
CF_OPEN_FILE_FLAG_NONE = 0x00000000,
CF_OPEN_FILE_FLAG_EXCLUSIVE = 0x00000001,
CF_OPEN_FILE_FLAG_WRITE_ACCESS = 0x00000002,
CF_OPEN_FILE_FLAG_DELETE_ACCESS = 0x00000004,
CF_OPEN_FILE_FLAG_FOREGROUND = 0x00000008
} ;
Константы
CF_OPEN_FILE_FLAG_NONEЗначение: 0x00000000 Флаги открытых файлов отсутствуют. |
CF_OPEN_FILE_FLAG_EXCLUSIVEЗначение: 0x00000001 Если этот параметр указан, CfOpenFileWithOplock возвращает дескриптор общей папки и запрашивает RH (OPLOCK_LEVEL_CACHE_READ | OPLOCK_LEVEL_CACHE_HANDLE) для файла. Обычный вызов CreateFile , который открывается для любого из FILE_EXECUTE | FILE_READ_DATA | FILE_WRITE_DATA | FILE_APPEND_DATA | DELETE (или оба GENERIC_READ | GENERIC_WRITE) разорвёт блокировку из-за конфликта общего доступа, как описано в разделе Примечания . Владелец oplock получит, чтобы закончить и подтвердить. |
CF_OPEN_FILE_FLAG_WRITE_ACCESSЗначение: 0x00000002 Если этот параметр указан, CfOpenFileWithOplock пытается открыть файл или каталог с помощью FILE_READ_DATA/FILE_LIST_DIRECTORY и FILE_WRITE_DATA/FILE_ADD_FILE доступа; в противном случае он пытается открыть файл или каталог с помощью FILE_READ_DATA/FILE_LIST_DIRECTORY. |
CF_OPEN_FILE_FLAG_DELETE_ACCESSЗначение: 0x00000004 Если этот параметр указан, CfOpenFileWithOplock пытается открыть файл или каталог с доступом DELETE; В противном случае файл открывается обычным образом. |
CF_OPEN_FILE_FLAG_FOREGROUNDЗначение: 0x00000008 При использовании этого флага CfOpenFileWithOplock не запрашивает блокировку. Этот параметр следует использовать, когда вызывающий объект выступает в качестве приложения переднего плана. Т. е. им не важно, вызывает ли дескриптор файла, созданный этим API, нарушения общего доступа для других вызывающих абонентов, и их не волнует нарушение блокировки, которые уже могут быть в файле. Таким образом, они открывают дескриптор без запроса блокировки. Примечание: Фоновое поведение по умолчанию запрашивает блокировку при открытии дескриптора файла, чтобы их вызов завершился сбоем, если уже есть блокировка, и им можно приказать закрыть свой дескриптор, если им потребуется выйти из пути, чтобы избежать нарушения общего доступа в дальнейшем. Если вызывающий объект не указывает CF_OPEN_FILE_FLAG_EXCLUSIVE в CfOpenFileWithOplock, операция будет получаться только OPLOCK_LEVEL_CACHE_READ, а не (OPLOCK_LEVEL_CACHE_READ | OPLOCK_LEVEL_CACHE_HANDLE), поэтому защита от нарушений общего доступа обычно может потребоваться фоновому приложению. |
Комментарии
Фоновое приложение обычно хочет прозрачно работать с файлами. В частности, они хотят избежать нарушений общего доступа к другим (переднему плану) открывателям. Для этого они принимают (OPLOCK_LEVEL_CACHE_READ | OPLOCK_LEVEL_CACHE_HANDLE), например, с помощью CF_OPEN_FILE_FLAG_EXCLUSIVE с CfOpenFileWithOplock. Затем, если появляется другое средство открытия, запрошенные режимы общего доступа и доступа которых конфликтуют с режимом фонового приложения, блокировка фонового приложения прерывается. Это предложит фоновому приложению закрыть дескриптор файла (для дескриптора Cf, что приводит к тому, что он становится недействительным — реальный базовый дескриптор был закрыт). Когда фоновое приложение закрывает свой дескриптор, другой запрос на открытие продолжается без нарушения общего доступа. Все это работает из-за OPLOCK_LEVEL_CACHE_HANDLE частью oplock. Без CF_OPEN_FILE_FLAG_EXCLUSIVE блокировка имеет только защиту OPLOCK_LEVEL_CACHE_READ, поэтому защита от нарушения общего доступа не предоставляется.
Если CF_OPEN_FILE_FLAG_EXCLUSIVE не указан, открытый объект получает общий доступ ко всем и получает OPLOCK_LEVEL_CACHE_READ блокировку.
Обычный вызов CreateFile не приведет к прерыванию блокировки. Если обычный файл CreateFile задает режим общего доступа, конфликтующий с доступом дескриптора Cf (например, если обычный файл CreateFile не указывает FILE_SHARE_READ), обычный файл CreateFile завершится сбоем с ERROR_SHARING_VIOLATION. Блокировка не прерывается до тех пор, пока другой вызывающий объект не выпустит конфликтующий ввод-вывод, например запись. Когда это происходит , разрыв блокировки является только рекомендацией.
Требования
| Требование | Значение |
|---|---|
| Минимальная версия клиента | Windows 10, версия 1709 [только классические приложения] |
| Минимальная версия сервера | Windows Server 2016 [только классические приложения] |
| Верхняя часть | cfapi.h |