Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Флаги для запроса различных разрешений на открытие файла.
Синтаксис
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 |