Compartir a través de


enumeración CF_OPEN_FILE_FLAGS (cfapi.h)

Marca para solicitar varios permisos al abrir un archivo.

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
} ;

Constantes

 
CF_OPEN_FILE_FLAG_NONE
Valor: 0x00000000
No hay marcas de archivo abiertas.
CF_OPEN_FILE_FLAG_EXCLUSIVE
Valor: 0x00000001
Cuando se especifica, CfOpenFileWithOplock devuelve un identificador de recurso compartido ninguno y solicita un RH (OPLOCK_LEVEL_CACHE_READ | OPLOCK_LEVEL_CACHE_HANDLE) oplock en el archivo.

Una llamada normal a CreateFile que se abre para cualquiera de FILE_EXECUTE | FILE_READ_DATA | FILE_WRITE_DATA | FILE_APPEND_DATA | DELETE (o ambos GENERIC_READ | GENERIC_WRITE) interrumpirá el interbloqueo debido al conflicto de uso compartido, como se describe en la sección Comentarios . El propietario de oplock llegará a finalizar y confirmar.
CF_OPEN_FILE_FLAG_WRITE_ACCESS
Valor: 0x00000002
Cuando se especifica, CfOpenFileWithOplock intenta abrir el archivo o directorio con FILE_READ_DATA/FILE_LIST_DIRECTORY y acceso FILE_WRITE_DATA/FILE_ADD_FILE; de lo contrario, intenta abrir el archivo o directorio con FILE_READ_DATA/FILE_LIST_DIRECTORY.
CF_OPEN_FILE_FLAG_DELETE_ACCESS
Valor: 0x00000004
Cuando se especifica, CfOpenFileWithOplock intenta abrir el archivo o directorio con acceso DELETE; de lo contrario, abre el archivo normalmente.
CF_OPEN_FILE_FLAG_FOREGROUND
Valor: 0x00000008
Cuando se usa esta marca, CfOpenFileWithOplock no solicita un oplock. Se debe usar cuando el autor de la llamada actúa como una aplicación en primer plano. Es decir, no les importa si el identificador de archivo creado por esta API provoca infracciones de uso compartido para otros autores de llamadas y no les importa interrumpir los interbloqueos que ya estén en el archivo. Por lo tanto, abren el identificador sin solicitar un interbloqueo.

Nota: El comportamiento en segundo plano predeterminado solicita un interbloqueo al abrir el identificador de archivo para que se produzca un error en su llamada si ya hay un interbloqueo y se les puede indicar que cierren su identificador si necesitan salir de la forma de evitar provocar una infracción de uso compartido más adelante.
A menos que el autor de la llamada especifique CF_OPEN_FILE_FLAG_EXCLUSIVE a CfOpenFileWithOplock, el oplock que obtenga solo será OPLOCK_LEVEL_CACHE_READ, no (OPLOCK_LEVEL_CACHE_READ | OPLOCK_LEVEL_CACHE_HANDLE), por lo que no habrá protección contra infracciones de uso compartido que una aplicación en segundo plano normalmente quiera.

Comentarios

Normalmente, una aplicación en segundo plano quiere funcionar de forma transparente en archivos. En concreto, quieren evitar que se produzcan infracciones de uso compartido a otros openers (en primer plano). Para ello, toman un (OPLOCK_LEVEL_CACHE_READ | OPLOCK_LEVEL_CACHE_HANDLE) oplock, como se concedería mediante CF_OPEN_FILE_FLAG_EXCLUSIVE con CfOpenFileWithOplock. A continuación, si algún otro abiertor viene junto con los modos de acceso/recurso compartido solicitados entran en conflicto con el modo de la aplicación en segundo plano, se interrumpe el interbloqueo de la aplicación en segundo plano. Esto pide a la aplicación en segundo plano que cierre su identificador de archivo (para un identificador Cf, lo que hace que no sea válido; se ha cerrado el identificador subyacente real). Una vez que la aplicación en segundo plano cierra su identificador, la otra solicitud para abrir continúa sin encontrar la infracción de uso compartido. Todo esto funciona debido a la OPLOCK_LEVEL_CACHE_HANDLE parte del oplock. Sin CF_OPEN_FILE_FLAG_EXCLUSIVE, el interbloqueo solo tiene OPLOCK_LEVEL_CACHE_READ protección, por lo que no se proporciona la protección de infracción de uso compartido.

Cuando no se especifica CF_OPEN_FILE_FLAG_EXCLUSIVE, la apertura se comparte todo y obtiene un OPLOCK_LEVEL_CACHE_READ oplock.

Una llamada normal a CreateFile no interrumpirá el interbloqueo. Si el createFile normal especifica un modo de uso compartido que entra en conflicto con el acceso del controlador Cf (por ejemplo, si el createFile normal no especifica FILE_SHARE_READ), se producirá un error en el createFile normal con ERROR_SHARING_VIOLATION. El interbloqueo no se interrumpe hasta que el otro autor de la llamada emite una E/S en conflicto, como una escritura. Cuando esto sucede , la interrupción del interbloqueo es solo aviso.

Requisitos

Requisito Value
Cliente mínimo compatible Windows 10, versión 1709 [solo aplicaciones de escritorio]
Servidor mínimo compatible Windows Server 2016 [solo aplicaciones de escritorio]
Encabezado cfapi.h

Consulte también

CfOpenFileWithOplock

CreateFile