CF_OPEN_FILE_FLAGS-Enumeration (cfapi.h)

Flags zum Anfordern verschiedener Berechtigungen beim Öffnen einer Datei.

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

Konstanten

 
CF_OPEN_FILE_FLAG_NONE
Wert: 0x00000000
Keine geöffneten Dateiflags.
CF_OPEN_FILE_FLAG_EXCLUSIVE
Wert: 0x00000001
Bei Angabe gibt CfOpenFileWithOplock ein Freigabe-None-Handle zurück und fordert einen RH an (OPLOCK_LEVEL_CACHE_READ | OPLOCK_LEVEL_CACHE_HANDLE) oplock für die Datei.

Ein normaler CreateFile-Aufruf , der für jedes der FILE_EXECUTE | FILE_READ_DATA | FILE_WRITE_DATA | FILE_APPEND_DATA | DELETE (oder entweder/beide GENERIC_READ | GENERIC_WRITE) wird den Oplock aufgrund des Freigabekonflikts unterbrechen, wie im Abschnitt "Hinweise" beschrieben. Der Oplock-Besitzer wird fertig und bestätigt.
CF_OPEN_FILE_FLAG_WRITE_ACCESS
Wert: 0x00000002
Bei Angabe versucht CfOpenFileWithOplock , die Datei oder das Verzeichnis mit FILE_READ_DATA/FILE_LIST_DIRECTORY und FILE_WRITE_DATA/FILE_ADD_FILE Zugriff zu öffnen. Andernfalls wird versucht, die Datei oder das Verzeichnis mit FILE_READ_DATA/FILE_LIST_DIRECTORY zu öffnen.
CF_OPEN_FILE_FLAG_DELETE_ACCESS
Wert: 0x00000004
Wenn angegeben, versucht CfOpenFileWithOplock , die Datei oder das Verzeichnis mit DELETE-Zugriff zu öffnen. Andernfalls wird die Datei normal geöffnet.
CF_OPEN_FILE_FLAG_FOREGROUND
Wert: 0x00000008
Wenn dieses Flag verwendet wird, fordert CfOpenFileWithOplock keinen Oplock an. Dies sollte verwendet werden, wenn der Aufrufer als Vordergrundanwendung fungiert. Das heißt, es ist ihnen egal, ob das von dieser API erstellte Dateihandle zu Freigabeverletzungen für andere Aufrufer führt, und sie kümmern sich nicht darum, oplocks zu unterbrechen, die sich möglicherweise bereits in der Datei befinden. Daher öffnen sie das Handle, ohne einen Oplock anzufordern.

Hinweis: Das Standardverhalten im Hintergrund fordert beim Öffnen des Dateihandles einen Oplock an, sodass ihr Aufruf fehlschlägt, wenn bereits ein Oplock vorhanden ist, und sie können angewiesen werden, ihr Handle zu schließen, wenn sie aus dem Weg gehen müssen, um später eine Freigabeverletzung zu vermeiden.
Sofern der Aufrufer nicht CF_OPEN_FILE_FLAG_EXCLUSIVE für CfOpenFileWithOplock angibt, wird der abgerufene Oplock nur OPLOCK_LEVEL_CACHE_READ, nicht (OPLOCK_LEVEL_CACHE_READ | OPLOCK_LEVEL_CACHE_HANDLE), sodass es nicht den Freigabeverletzungsschutz gibt, den eine Hintergrund-App normalerweise wünschen würde.

Hinweise

Eine Hintergrundanwendung möchte in der Regel transparent mit Dateien arbeiten. Insbesondere möchten sie verhindern, dass Verstöße gegen die Freigabe für andere (Vordergrund-)Opener verursacht werden. Dazu nehmen sie eine (OPLOCK_LEVEL_CACHE_READ | OPLOCK_LEVEL_CACHE_HANDLE) oplock, z. B. durch Verwendung von CF_OPEN_FILE_FLAG_EXCLUSIVE mit CfOpenFileWithOplock. Wenn dann ein anderer Opener kommt, dessen angeforderte Freigabe-/Zugriffsmodi mit dem Modus der Hintergrundanwendung in Konflikt treten, wird der Oplock der Hintergrundanwendung unterbrochen. Dadurch wird die Hintergrund-App aufgefordert, ihr Dateihandle zu schließen (für ein Cf-Handle, das dazu führt, dass es ungültig wird – das eigentliche zugrunde liegende Handle wurde geschlossen). Sobald die Hintergrund-App ihr Handle schließt, wird die andere Aufforderung zum Öffnen fortgesetzt, ohne dass die Freigabeverletzung auftritt. Dies alles funktioniert aufgrund der OPLOCK_LEVEL_CACHE_HANDLE Teil des Oplocks. Ohne CF_OPEN_FILE_FLAG_EXCLUSIVE verfügt der Oplock nur über OPLOCK_LEVEL_CACHE_READ Schutz, sodass der Schutz gegen Die Freigabeverletzung nicht bereitgestellt wird.

Wenn CF_OPEN_FILE_FLAG_EXCLUSIVE nicht angegeben ist, wird geöffnet alle freigeben , und es wird ein OPLOCK_LEVEL_CACHE_READ Oplock abgerufen.

Ein normaler CreateFile-Aufruf unterbricht den Oplock nicht. Wenn die normale CreateFile einen Freigabemodus angibt, der mit dem Zugriff des Cf-Handles in Konflikt steht (für instance, wenn die normale CreateFile nicht FILE_SHARE_READ angibt), schlägt die normale CreateFile-Datei mit ERROR_SHARING_VIOLATION fehl. Der Oplock wird erst unterbrochen, wenn der andere Aufrufer eine in Konflikt stehende E/A ausgibt, z. B. einen Schreibvorgang. Wenn dies der Fall ist, ist der Oplock-Umbruch nur empfohlen.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows 10, Version 1709 [nur Desktop-Apps]
Unterstützte Mindestversion (Server) Windows Server 2016 [nur Desktop-Apps]
Kopfzeile cfapi.h

Weitere Informationen

CfOpenFileWithOplock

CreateFile