Share via


CF_OPEN_FILE_FLAGS 열거형(cfapi.h)

파일 열기에 대한 다양한 권한을 요청하는 플래그입니다.

Syntax

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) 파일의 oplock입니다.

FILE_EXECUTE |에 대해 열리는 일반적인 CreateFile 호출 FILE_READ_DATA | FILE_WRITE_DATA | FILE_APPEND_DATA | DELETE(또는 둘 다 GENERIC_READ | GENERIC_WRITE)은 설명 섹션에 설명된 대로 공유 충돌로 인해 oplock 을 중단합니다 . 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 은 oplock을 요청하지 않습니다. 호출자가 포그라운드 애플리케이션 역할을 할 때 사용해야 합니다. 즉, 이 API에서 만든 파일 핸들이 다른 호출자에 대한 공유 위반을 일으키는지 여부를 신경 쓰지 않으며 이미 파일에 있을 수 있는 oplock을 위반하는 것에 대해 신경 쓰지 않습니다. 따라서 oplock을 요청하지 않고 핸들을 엽니다.

참고: 기본 백그라운드 동작은 파일 핸들을 열 때 oplock을 요청하므로 이미 oplock이 있는 경우 호출이 실패하고 나중에 공유 위반이 발생하지 않도록 하려면 핸들을 닫으라는 지시를 받을 수 있습니다.
호출자가 CfOpenFileWithOplock에 대한 CF_OPEN_FILE_FLAG_EXCLUSIVE 지정하지 않는 한 가져오는 oplock은 OPLOCK_LEVEL_CACHE_READ(OPLOCK_LEVEL_CACHE_READ | OPLOCK_LEVEL_CACHE_HANDLE)이므로 백그라운드 앱이 일반적으로 원할 수 있는 공유 위반 보호가 없습니다.

설명

백그라운드 애플리케이션은 일반적으로 파일에서 투명하게 작동하려고 합니다. 특히, 그들은 다른 (전경) 오프너에 공유 위반을 일으키는 것을 방지하려고합니다. 이렇게 하려면 (OPLOCK_LEVEL_CACHE_READ | 와 같은 OPLOCK_LEVEL_CACHE_HANDLE) oplock은 CfOpenFileWithOplock과 함께 CF_OPEN_FILE_FLAG_EXCLUSIVE 사용하여 부여됩니다. 그런 다음 요청된 공유/액세스 모드가 백그라운드 애플리케이션의 모드와 충돌하는 다른 오프너가 함께 제공되면 백그라운드 애플리케이션의 oplock이 중단됩니다. 이렇게 하면 백그라운드 앱이 파일 핸들을 닫을지 묻는 메시지가 표시됩니다(Cf 핸들의 경우 유효하지 않은 경우 실제 기본 핸들이 닫혔습니다). 백그라운드 앱이 핸들을 닫으면 공유 위반이 발생하지 않고 열려는 다른 요청이 진행됩니다. 이 모든 것은 oplock의 OPLOCK_LEVEL_CACHE_HANDLE 부분으로 인해 작동합니다. CF_OPEN_FILE_FLAG_EXCLUSIVE 없으면 oplock에는 OPLOCK_LEVEL_CACHE_READ 보호만 있으므로 공유 위반 보호가 제공되지 않습니다.

CF_OPEN_FILE_FLAG_EXCLUSIVE 지정하지 않으면 open은 모두 공유 되고 OPLOCK_LEVEL_CACHE_READ oplock을 가져옵니다.

일반적인 CreateFile 호출은 oplock을 중단하지 않습니다. 일반 CreateFile이 Cf 핸들의 액세스와 충돌하는 공유 모드를 지정하는 경우(instance 경우 일반 CreateFile에서 FILE_SHARE_READ 지정하지 않는 경우) 일반 CreateFile은 ERROR_SHARING_VIOLATION 함께 실패합니다. 다른 호출자가 쓰기와 같은 충돌하는 I/O를 발급할 때까지 oplock이 중단되지 않습니다. 이 경우 oplock 중단은 권고에만 해당됩니다.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows 10 버전 1709 [데스크톱 앱만 해당]
지원되는 최소 서버 Windows Server 2016 [데스크톱 앱만 해당]
머리글 cfapi.h

추가 정보

CfOpenFileWithOplock

CreateFile