Freigeben über


CreateFileTransactedW-Funktion (winbase.h)

[Microsoft empfiehlt Entwicklern dringend, alternative Mittel zu nutzen, um die Anforderungen Ihrer Anwendung zu erreichen. Viele Szenarien, für die TxF entwickelt wurde, können durch einfachere und leichter verfügbare Techniken erreicht werden. Darüber hinaus ist TxF in zukünftigen Versionen von Microsoft Windows möglicherweise nicht verfügbar. Weitere Informationen und Alternativen zu TxF finden Sie unter Alternativen zur Verwendung von Transactional NTFS.]

Erstellt oder öffnet eine Datei, einen Dateidatenstrom oder ein Verzeichnis als transacted-Vorgang. Die Funktion gibt ein Handle zurück, das für den Zugriff auf das Objekt verwendet werden kann.

Um diesen Vorgang als nichttransactierten Vorgang auszuführen oder auf andere Objekte als Dateien zuzugreifen (z. B. benannte Rohre, physische Geräte, Mailslots), verwenden Sie die CreateFile--Funktion.

Weitere Informationen zu Transaktionen finden Sie im Abschnitt "Hinweise" dieses Themas.

Syntax

HANDLE CreateFileTransactedW(
  [in]           LPCWSTR               lpFileName,
  [in]           DWORD                 dwDesiredAccess,
  [in]           DWORD                 dwShareMode,
  [in, optional] LPSECURITY_ATTRIBUTES lpSecurityAttributes,
  [in]           DWORD                 dwCreationDisposition,
  [in]           DWORD                 dwFlagsAndAttributes,
  [in, optional] HANDLE                hTemplateFile,
  [in]           HANDLE                hTransaction,
  [in, optional] PUSHORT               pusMiniVersion,
                 PVOID                 lpExtendedParameter
);

Parameter

[in] lpFileName

Der Name eines zu erstellenden oder geöffneten Objekts.

Das Objekt muss sich auf dem lokalen Computer befinden; andernfalls schlägt die Funktion fehl, und der letzte Fehlercode wird auf ERROR_TRANSACTIONS_UNSUPPORTED_REMOTEfestgelegt.

Standardmäßig ist der Name auf MAX_PATH Zeichen beschränkt. Um diesen Grenzwert auf 32.767 breite Zeichen zu erweitern, stellen Sie "\\?\" dem Pfad voran. Weitere Informationen finden Sie unter Namensdateien, Pfade und Namespaces.

Trinkgeld

Ab Windows 10, Version 1607, können Sie sich anmelden, um die MAX_PATH Einschränkung zu entfernen, ohne "\\?\". Weitere Informationen finden Sie im Abschnitt "Maximale Pfadlängenbeschränkung" Benennungsdateien, Pfade und Namespaces.

Um einen Dateidatenstrom zu erstellen, geben Sie den Namen der Datei, einen Doppelpunkt und dann den Namen des Datenstroms an. Weitere Informationen finden Sie unter File Streams.

[in] dwDesiredAccess

Der Zugriff auf das Objekt, das als lese-, schreibgeschützt oder weder (Null) zusammengefasst werden kann. Die am häufigsten verwendeten Werte sind GENERIC_READ, GENERIC_WRITEoder beide (GENERIC_READ | GENERIC_WRITE). Weitere Informationen finden Sie unter Generic Access Rights und File Security and Access Rights.

Wenn dieser Parameter null ist, kann die Anwendung Datei-, Verzeichnis- oder Geräteattribute abfragen, ohne auf diese Datei oder das Gerät zuzugreifen. Weitere Informationen finden Sie im Abschnitt "Hinweise" dieses Themas.

Sie können keinen Zugriffsmodus anfordern, der mit dem Freigabemodus in Konflikt steht, der in einer geöffneten Anforderung mit einem offenen Handle angegeben ist. Weitere Informationen finden Sie unter Erstellen und Öffnen von Dateien.

[in] dwShareMode

Der Freigabemodus eines Objekts, das gelesen, geschrieben, beides gelöscht werden kann, oder keines (siehe die folgende Tabelle).

Wenn dieser Parameter null ist und CreateFileTransacted- erfolgreich ist, kann das Objekt nicht freigegeben und erst wieder geöffnet werden, wenn das Handle geschlossen wird. Weitere Informationen finden Sie im Abschnitt "Hinweise" dieses Themas.

Sie können keinen Freigabemodus anfordern, der mit dem Zugriffsmodus in Konflikt steht, der in einer geöffneten Anforderung angegeben ist, die über ein offenes Handle verfügt, da dies zu der folgenden Freigabeverletzung führen würde: ERROR_SHARING_VIOLATION. Weitere Informationen finden Sie unter Erstellen und Öffnen von Dateien.

Verwenden Sie zum Aktivieren eines Prozesses die Freigabe eines Objekts, während ein anderer Prozess das Objekt geöffnet hat, eine Kombination aus einem oder mehreren der folgenden Werte, um den Zugriffsmodus anzugeben, den sie zum Öffnen des Objekts anfordern können.

Hinweis Die Freigabeoptionen für jedes geöffnete Handle bleiben wirksam, bis dieses Handle geschlossen wird, unabhängig vom Prozesskontext.
 
Wert Bedeutung
0
0x00000000
Deaktiviert nachfolgende Öffnungsvorgänge für ein Objekt, um einen beliebigen Typ des Zugriffs auf dieses Objekt anzufordern.
FILE_SHARE_DELETE
0x00000004
Ermöglicht nachfolgenden Öffnenvorgängen für ein Objekt das Anfordern des Löschzugriffs.

Andernfalls können andere Prozesse das Objekt nicht öffnen, wenn sie den Löschzugriff anfordern.

Wenn dieses Flag nicht angegeben ist, aber das Objekt für den Löschzugriff geöffnet wurde, schlägt die Funktion fehl.

FILE_SHARE_READ
0x00000001
Ermöglicht nachfolgenden Öffnenvorgängen für ein Objekt das Anfordern des Lesezugriffs.

Andernfalls können andere Prozesse das Objekt nicht öffnen, wenn sie Lesezugriff anfordern.

Wenn dieses Flag nicht angegeben ist, aber das Objekt für den Lesezugriff geöffnet wurde, schlägt die Funktion fehl.

FILE_SHARE_WRITE
0x00000002
Ermöglicht nachfolgenden Öffnenvorgängen für ein Objekt das Anfordern des Schreibzugriffs.

Andernfalls können andere Prozesse das Objekt nicht öffnen, wenn sie Schreibzugriff anfordern.

Wenn dieses Flag nicht angegeben ist, aber das Objekt für den Schreibzugriff geöffnet wurde oder über eine Dateizuordnung mit Schreibzugriff verfügt, schlägt die Funktion fehl.

[in, optional] lpSecurityAttributes

Ein Zeiger auf eine SECURITY_ATTRIBUTES-Struktur, die einen optionalen Sicherheitsdeskriptor enthält, und bestimmt außerdem, ob der zurückgegebene Handle von untergeordneten Prozessen geerbt werden kann. Der Parameter kann NULL-sein.

Wenn der parameter lpSecurityAttributesNULList, kann das von CreateFileTransacted zurückgegebene Handle nicht von untergeordneten Prozessen geerbt werden, die Ihre Anwendung erstellen kann, und das dem zurückgegebenen Handle zugeordnete Objekt erhält einen Standardsicherheitsdeskriptor.

Das bInheritHandle Element der Struktur gibt an, ob das zurückgegebene Handle geerbt werden kann.

Der lpSecurityDescriptor Element der Struktur gibt einen Sicherheitsdeskriptor für ein Objekt an, kann aber auch NULL-sein.

Wenn lpSecurityDescriptor Member NULL-ist, wird dem zurückgegebenen Handle ein Standardsicherheitsdeskriptor zugewiesen.

CreateFileTransacted ignoriert den lpSecurityDescriptor Member beim Öffnen einer vorhandenen Datei, verwendet aber weiterhin das bInheritHandle Member.

Weitere Informationen finden Sie im Abschnitt "Hinweise" dieses Themas.

[in] dwCreationDisposition

Eine Aktion, die für dateien ausgeführt werden soll, die vorhanden sind und nicht vorhanden sind.

Weitere Informationen finden Sie im Abschnitt "Hinweise" dieses Themas.

Dieser Parameter muss einer der folgenden Werte sein, die nicht kombiniert werden können.

Wert Bedeutung
CREATE_ALWAYS
2
Erstellt immer eine neue Datei.

Wenn die angegebene Datei vorhanden ist und schreibbar ist, schneidet die Funktion die Datei ab, die Funktion wird erfolgreich ausgeführt, und der Letzte-Fehler-Code wird auf ERROR_ALREADY_EXISTS (183) festgelegt.

Wenn die angegebene Datei nicht vorhanden ist und ein gültiger Pfad ist, wird eine neue Datei erstellt, die Funktion erfolgreich ist und der letzte Fehlercode auf Null festgelegt ist.

Weitere Informationen finden Sie im Abschnitt "Hinweise" dieses Themas.

CREATE_NEW
1
Erstellt eine neue Datei, nur wenn sie noch nicht vorhanden ist.

Wenn die angegebene Datei vorhanden ist, schlägt die Funktion fehl, und der letzte Fehlercode wird auf ERROR_FILE_EXISTS (80) festgelegt.

Wenn die angegebene Datei nicht vorhanden ist und ein gültiger Pfad zu einem schreibbaren Speicherort ist, wird eine neue Datei erstellt.

OPEN_ALWAYS
4
Öffnet immer eine Datei.

Wenn die angegebene Datei vorhanden ist, wird die Funktion erfolgreich ausgeführt, und der letzte Fehlercode wird auf ERROR_ALREADY_EXISTS (183) festgelegt.

Wenn die angegebene Datei nicht vorhanden ist und ein gültiger Pfad zu einem schreibbaren Speicherort ist, erstellt die Funktion eine Datei, und der letzte Fehlercode wird auf Null festgelegt.

OPEN_EXISTING
3
Öffnet eine Datei oder ein Gerät nur, wenn sie vorhanden ist.

Wenn die angegebene Datei nicht vorhanden ist, schlägt die Funktion fehl, und der letzte Fehlercode wird auf ERROR_FILE_NOT_FOUND (2) festgelegt.

Weitere Informationen finden Sie im Abschnitt "Hinweise" dieses Themas.

TRUNCATE_EXISTING
5
Öffnet eine Datei und schneidet sie ab, sodass die Größe null Byte ist, nur wenn sie vorhanden ist.

Wenn die angegebene Datei nicht vorhanden ist, schlägt die Funktion fehl, und der letzte Fehlercode wird auf ERROR_FILE_NOT_FOUND (2) festgelegt.

Der aufrufende Prozess muss die Datei mit dem GENERIC_WRITE Bitsatz im Rahmen des dwDesiredAccess--Parameters öffnen.

[in] dwFlagsAndAttributes

Die Dateiattribute und Flags FILE_ATTRIBUTE_NORMAL der am häufigsten verwendete Standardwert.

Dieser Parameter kann eine beliebige Kombination der verfügbaren Dateiattribute (FILE_ATTRIBUTE_*) enthalten. Alle anderen Dateiattribute überschreiben FILE_ATTRIBUTE_NORMAL.

Dieser Parameter kann auch Kombinationen von Flags (FILE_FLAG_) für die Steuerung des Pufferverhaltens, Zugriffsmodi und andere spezielle Flags enthalten. Diese werden mit allen FILE_ATTRIBUTE_ Werten kombiniert.

Dieser Parameter kann auch SqOS-Informationen (Security Quality of Service) enthalten, indem das SECURITY_SQOS_PRESENT Flag angegeben wird. Zusätzliche SQOS-bezogene Flags-Informationen werden in der Tabelle nach den Attributen und Flags-Tabellen dargestellt.

  

Wenn CreateFileTransacted eine vorhandene Datei öffnet, kombiniert es in der Regel die Dateikennzeichnungen mit den Dateiattributen der vorhandenen Datei und ignoriert alle Dateiattribute, die als Teil von dwFlagsAndAttributesbereitgestellt werden. Spezielle Fälle sind in Erstellen und Öffnen von Dateiendetailliert beschrieben.

 
Die folgenden Dateiattribute und Flags werden nur für Dateiobjekte verwendet, nicht für andere Objekttypen, die CreateFileTransacted geöffnet werden (zusätzliche Informationen finden Sie im Abschnitt "Hinweise" dieses Themas). Weitere Informationen zum erweiterten Zugriff auf Dateiattribute finden Sie unter SetFileAttributes. Eine vollständige Liste aller Dateiattribute mit ihren Werten und Beschreibungen finden Sie unter File Attribute Constants.
Attribut Bedeutung
FILE_ATTRIBUTE_ARCHIVE
32 (0x20)
Die Datei sollte archiviert werden. Anwendungen verwenden dieses Attribut, um Dateien für die Sicherung oder Entfernung zu markieren.
FILE_ATTRIBUTE_ENCRYPTED
16384 (0x4000)
Die Datei oder das Verzeichnis ist verschlüsselt. Bei einer Datei bedeutet dies, dass alle Daten in der Datei verschlüsselt sind. Bei einem Verzeichnis bedeutet dies, dass die Verschlüsselung die Standardeinstellung für neu erstellte Dateien und Unterverzeichnisse ist. Weitere Informationen finden Sie unter Dateiverschlüsselung.

Dieses Kennzeichen hat keine Auswirkung, wenn auch FILE_ATTRIBUTE_SYSTEM angegeben wird.

FILE_ATTRIBUTE_HIDDEN
2 (0x2)
Die Datei ist ausgeblendet. Fügen Sie sie nicht in eine normale Verzeichnisauflistung ein.
FILE_ATTRIBUTE_NORMAL
128 (0x80)
Für die Datei sind keine anderen Attribute festgelegt. Dieses Attribut ist nur gültig, wenn es allein verwendet wird.
FILE_ATTRIBUTE_OFFLINE
4096 (0x1000)
Die Daten einer Datei sind nicht sofort verfügbar. Dieses Attribut gibt an, dass Dateidaten physisch in den Offlinespeicher verschoben werden. Dieses Attribut wird von Remote Storage, der hierarchischen Speicherverwaltungssoftware, verwendet. Anwendungen sollten dieses Attribut nicht willkürlich ändern.
FILE_ATTRIBUTE_READONLY
1 (0x1)
Die Datei ist schreibgeschützt. Anwendungen können die Datei lesen, aber nicht in die Datei schreiben oder löschen.
FILE_ATTRIBUTE_SYSTEM
4 (0x4)
Die Datei ist Teil oder wird ausschließlich von einem Betriebssystem verwendet.
FILE_ATTRIBUTE_TEMPORARY
256 (0x100)
Die Datei wird für temporären Speicher verwendet. Dateisysteme vermeiden das Schreiben von Daten in den Massenspeicher, wenn genügend Cachespeicher verfügbar ist, da eine Anwendung nach dem Schließen eines Handles eine temporäre Datei löscht. In diesem Fall kann das System das Schreiben der Daten vollständig vermeiden. Andernfalls werden die Daten nach dem Schließen des Handles geschrieben.
 
Flagge Bedeutung
FILE_FLAG_BACKUP_SEMANTICS
0x02000000
Die Datei wird für einen Sicherungs- oder Wiederherstellungsvorgang geöffnet oder erstellt. Das System stellt sicher, dass der aufrufende Prozess Dateisicherheitsprüfungen außer Kraft setzt, wenn der Prozess über SE_BACKUP_NAME und SE_RESTORE_NAME Berechtigungen verfügt. Weitere Informationen finden Sie unter Ändern von Berechtigungen in einem Token-.

Sie müssen dieses Flag festlegen, um ein Handle für ein Verzeichnis abzurufen. Ein Verzeichnishandle kann anstelle eines Dateihandles an einige Funktionen übergeben werden. Weitere Informationen finden Sie unter Verzeichnishandles.

FILE_FLAG_DELETE_ON_CLOSE
0x04000000
Die Datei muss unmittelbar nach dem Schließen des letzten Transacted Writer-Handles für die Datei gelöscht werden, sofern die Transaktion noch aktiv ist. Wenn eine Datei zum Löschen markiert wurde und ein Transacted Writer Handle nach Abschluss der Transaktion noch geöffnet ist, wird die Datei nicht gelöscht.

Wenn eine Datei geöffnete Handles enthält, schlägt der Aufruf fehl, es sei denn, sie wurden alle mit dem FILE_SHARE_DELETE Freigabemodus geöffnet.

Nachfolgende offene Anforderungen für die Datei schlagen fehl, es sei denn, der FILE_SHARE_DELETE Freigabemodus ist angegeben.

FILE_FLAG_NO_BUFFERING
0x20000000
Die Datei wird ohne Systemzwischenspeicherung geöffnet. Dieses Flag wirkt sich nicht auf das Zwischenspeichern der Festplatte oder die zugeordneten Speicherdateien aus. In Kombination mit FILE_FLAG_OVERLAPPEDgibt das Flag eine maximale asynchrone Leistung, da die E/A nicht auf die synchronen Vorgänge des Speicher-Managers angewiesen ist. Einige E/A-Vorgänge dauern jedoch mehr Zeit, da Daten nicht im Cache gespeichert werden. Außerdem können die Dateimetadaten weiterhin zwischengespeichert werden. Verwenden Sie zum Leeren der Metadaten auf den Datenträger die FlushFileBuffers--Funktion.

Eine Anwendung muss bestimmte Anforderungen erfüllen, wenn Sie mit Dateien arbeiten, die mit FILE_FLAG_NO_BUFFERINGgeöffnet werden:

  • Der Dateizugriff muss mit Byte-Offsets innerhalb einer Datei beginnen, die ganzzahlige Vielfache der Größe des Volumensektors sind.
  • Der Dateizugriff muss für Die Anzahl der Bytes gelten, die ganzzahlige Vielfache der Größe des Volumensektors sind. Wenn die Sektorgröße beispielsweise 512 Byte beträgt, kann eine Anwendung Lese- und Schreibvorgänge von 512, 1024, 1536 oder 2048 Bytes anfordern, jedoch nicht von 335, 981 oder 7171 Bytes.
  • Pufferadressen für Lese- und Schreibvorgänge sollten sektorbündig ausgerichtet werden, was bedeutet, dass sie an Adressen im Arbeitsspeicher ausgerichtet sind, die ganzzahlige Vielfache der Größe des Volumensektors sind. Je nach Datenträger wird diese Anforderung möglicherweise nicht erzwungen.
Eine Möglichkeit zum Ausrichten von Puffern auf ganzzahligen Vielfachen der Größe des Volumensektors besteht darin, VirtualAlloc- zum Zuordnen der Puffer zu verwenden. Er weist Arbeitsspeicher zu, der an Adressen ausgerichtet ist, die ganzzahlige Vielfache der Arbeitsspeicherseitengröße des Betriebssystems sind. Da sowohl die Größe der Speicherseite als auch die Größe des Volumesektors 2 groß sind, wird dieser Speicher auch an Adressen ausgerichtet, die ganzzahlige Vielfache einer Volumensektorgröße sind. Speicherseiten sind 4 oder 8 KB groß; Sektoren sind 512 Byte (Festplatten), 2048 Bytes (CD) oder 4096 Byte (Festplatten), daher können Volumensektoren niemals größer sein als Speicherseiten.

Eine Anwendung kann eine Volumensektorgröße ermitteln, indem sie die GetDiskFreeSpace--Funktion aufruft.

FILE_FLAG_OPEN_NO_RECALL
0x00100000
Die Dateidaten werden angefordert, sollten sich aber weiterhin im Remotespeicher befinden. Es sollte nicht zurück in die lokale Lagerung transportiert werden. Dieses Kennzeichen dient der Verwendung durch Remotespeichersysteme.
FILE_FLAG_OPEN_REPARSE_POINT
0x00200000
Normale Analysepunkt Verarbeitung erfolgt nicht; CreateFileTransacted versucht, den Analysepunkt zu öffnen. Wenn eine Datei geöffnet wird, wird ein Dateihandle zurückgegeben, unabhängig davon, ob der Filter, der den Analysepunkt steuert, betriebsbereit ist. Dieses Flag kann nicht mit dem CREATE_ALWAYS Flag verwendet werden. Wenn die Datei kein Analysepunkt ist, wird dieses Flag ignoriert.
FILE_FLAG_OVERLAPPED
0x40000000
Die Datei wird für asynchrone E/A geöffnet oder erstellt. Nach Abschluss des Vorgangs wird das in der OVERLAPPED Struktur angegebene Ereignis auf den signalierten Zustand festgelegt. Vorgänge, die eine erhebliche Zeit in Anspruch nehmen, um ERROR_IO_PENDINGzurückzugeben.

Wenn dieses Flag angegeben ist, kann die Datei für gleichzeitige Lese- und Schreibvorgänge verwendet werden. Das System verwaltet den Dateizeiger nicht, daher müssen Sie die Dateiposition an die Lese- und Schreibfunktionen in der OVERLAPPED Struktur übergeben oder den Dateizeiger aktualisieren.

Wenn dieses Flag nicht angegeben ist, werden E/A-Vorgänge serialisiert, auch wenn die Aufrufe der Lese- und Schreibfunktionen eine OVERLAPPED- Struktur angeben.

FILE_FLAG_POSIX_SEMANTICS
0x01000000
Auf die Datei kann nach POSIX-Regeln zugegriffen werden. Dies umfasst das Zulassen mehrerer Dateien mit Namen, die sich nur für Dateisysteme unterscheiden, die diese Benennung unterstützen. Verwenden Sie bei verwendung dieser Option Sorgfalt, da dateien, die mit diesem Flag erstellt wurden, möglicherweise nicht von Anwendungen zugänglich sind, die für MS-DOS oder 16-Bit-Windows geschrieben sind.
FILE_FLAG_RANDOM_ACCESS
0x10000000
Auf die Datei soll zufällig zugegriffen werden. Das System kann dies als Hinweis verwenden, um das Zwischenspeichern von Dateien zu optimieren.
FILE_FLAG_SESSION_AWARE
0x00800000
Die Datei oder das Gerät wird mit Sitzungsbewusstsein geöffnet. Wenn dieses Flag nicht angegeben ist, können geräte pro Sitzung (z. B. ein Gerät mit RemoteFX USB Redirection) nicht durch Prozesse geöffnet werden, die in Sitzung 0 ausgeführt werden. Dieses Kennzeichen hat keine Auswirkung für Anrufer, die sich nicht in Sitzung 0 befinden. Dieses Flag wird nur für Servereditionen von Windows unterstützt.

Windows Server 2008 R2 und Windows Server 2008: Dieses Flag wird vor Windows Server 2012 nicht unterstützt.

FILE_FLAG_SEQUENTIAL_SCAN
0x08000000
Der Zugriff auf die Datei erfolgt sequenziell von Anfang bis Ende. Das System kann dies als Hinweis verwenden, um das Zwischenspeichern von Dateien zu optimieren. Wenn eine Anwendung den Dateizeiger für den zufälligen Zugriff verschiebt, kann die optimale Zwischenspeicherung nicht auftreten. Der korrekte Betrieb ist jedoch weiterhin gewährleistet.

Die Angabe dieses Flags kann die Leistung für Anwendungen erhöhen, die große Dateien mit sequenziellem Zugriff lesen. Leistungsgewinne können für Anwendungen, die große Dateien hauptsächlich sequenziell lesen, noch spürbarer werden, aber gelegentlich kleine Bytebereiche überspringen.

Dieses Flag hat keine Auswirkung, wenn das Dateisystem keine zwischengespeicherte E/A und FILE_FLAG_NO_BUFFERINGunterstützt.

FILE_FLAG_WRITE_THROUGH
0x80000000
Schreibvorgänge durchlaufen keinen Zwischencache, sie wechseln direkt auf den Datenträger.

Wenn FILE_FLAG_NO_BUFFERING nicht auch angegeben ist, sodass die Systemzwischenspeicherung wirksam ist, werden die Daten in den Systemcache geschrieben, aber ohne Verzögerung auf den Datenträger geleert.

Wenn FILE_FLAG_NO_BUFFERING ebenfalls angegeben ist, sodass die Systemzwischenspeicherung nicht wirksam ist, werden die Daten sofort auf den Datenträger geleert, ohne den Systemcache durchzugehen. Das Betriebssystem fordert außerdem einen Schreibzugriff auf den Festplattencache auf persistente Medien an. Allerdings unterstützt nicht alle Hardware diese Schreibzugriffsfunktion.

 

Der dwFlagsAndAttributes Parameter kann auch Sicherheitsqualitätsinformationen angeben. Weitere Informationen finden Sie unter Identitätswechselebenen. Wenn die aufrufende Anwendung das SECURITY_SQOS_PRESENT Flag als Teil dwFlagsAndAttributesangibt, kann sie auch einen oder mehrere der folgenden Werte enthalten.

Sicherheitskennzeichnung Bedeutung
SECURITY_ANONYMOUS
Imitiert einen Client auf der Ebene des anonymen Identitätswechsels.
SECURITY_CONTEXT_TRACKING
Der Sicherheitsüberwachungsmodus ist dynamisch. Wenn dieses Flag nicht angegeben ist, ist der Sicherheitsüberwachungsmodus statisch.
SECURITY_DELEGATION
Imitiert einen Client auf Der Ebene des Identitätswechsels der Delegierung.
SECURITY_EFFECTIVE_ONLY
Nur die aktivierten Aspekte des Sicherheitskontexts des Clients stehen dem Server zur Verfügung. Wenn Sie dieses Kennzeichen nicht angeben, sind alle Aspekte des Sicherheitskontexts des Clients verfügbar.

Auf diese Weise kann der Client die Gruppen und Berechtigungen einschränken, die ein Server beim Identitätswechsel des Clients verwenden kann.

SECURITY_IDENTIFICATION
Imitiert einen Client auf Identitätswechselebene.
SECURITY_IMPERSONATION
Identitätswechsel eines Clients auf Identitätswechselebene. Dies ist das Standardverhalten, wenn keine anderen Flags zusammen mit dem SECURITY_SQOS_PRESENT-Flag angegeben werden.

[in, optional] hTemplateFile

Ein gültiger Handle für eine Vorlagendatei mit dem GENERIC_READ Zugriffsrecht. Die Vorlagendatei stellt Dateiattribute und erweiterte Attribute für die datei, die erstellt wird. Dieser Parameter kann NULL-sein.

Beim Öffnen einer vorhandenen Datei ignoriert CreateFileTransacted die Vorlagendatei.

Beim Öffnen einer neuen EFS-verschlüsselten Datei erbt die Datei die DACL aus dem übergeordneten Verzeichnis.

[in] hTransaction

Ein Handle für die Transaktion. Dieses Handle wird von der CreateTransaction--Funktion zurückgegeben.

[in, optional] pusMiniVersion

Die Miniversion, die geöffnet werden soll. Wenn die in hTransaction- angegebene Transaktion nicht die Transaktion ist, die die Datei ändert, sollte dieser Parameter NULL-sein. Andernfalls kann dieser Parameter ein Miniversionsbezeichner sein, der vom FSCTL_TXFS_CREATE_MINIVERSION Steuerelementcode oder einem der folgenden Werte zurückgegeben wird.

Wert Bedeutung
TXFS_MINIVERSION_COMMITTED_VIEW
0x0000
Die Ansicht der Datei ab dem letzten Commit.
TXFS_MINIVERSION_DIRTY_VIEW
0xFFFF
Die Ansicht der Datei, während sie von der Transaktion geändert wird.
TXFS_MINIVERSION_DEFAULT_VIEW
0xFFFE
Die zugesicherte oder geänderte Ansicht der Datei hängt vom Kontext ab. Eine Transaktion, die die Datei ändert, ruft die geänderte Ansicht ab, während eine Transaktion, die die Datei nicht ändert, die zugesicherte Ansicht abruft.

lpExtendedParameter

Dieser Parameter ist reserviert und muss NULL-sein.

Rückgabewert

Wenn die Funktion erfolgreich ist, ist der Rückgabewert ein geöffnetes Handle für die angegebene Datei, das Gerät, das benannte Pipe oder den E-Mail-Steckplatz.

Wenn die Funktion fehlschlägt, wird der Rückgabewert INVALID_HANDLE_VALUE. Rufen Sie GetLastErrorauf, um erweiterte Fehlerinformationen zu erhalten.

Bemerkungen

Wenn Sie das von CreateFileTransactedzurückgegebene Handle verwenden, verwenden Sie ggf. die Transaktionsversion der Datei-E/A-Funktionen anstelle der Standardmäßigen Datei-E/A-Funktionen. Weitere Informationen finden Sie unter Überlegungen zur Programmierung für transaktionsbasierte NTFS-.

Beim Öffnen eines transaktionsierten Handles in einem Verzeichnis muss dieses Handle über FILE_WRITE_DATA (FILE_ADD_FILE) und FILE_APPEND_DATA (FILE_ADD_SUBDIRECTORY) Berechtigungen verfügen. Diese sind in FILE_GENERIC_WRITE Berechtigungen enthalten. Sie sollten Verzeichnisse mit weniger Berechtigungen öffnen, wenn Sie nur das Handle zum Erstellen von Dateien oder Unterverzeichnissen verwenden. andernfalls können Freigabeverletzungen auftreten.

Sie können eine Datei mit FILE_EXECUTE Zugriffsebene nicht öffnen, wenn diese Datei Teil einer anderen Transaktion ist (d. a. eine andere Anwendung, die sie geöffnet hat, indem Sie CreateFileTransactedaufrufen). Dies bedeutet, dass CreateFileTransacted- fehlschlägt, wenn die Zugriffsebene FILE_EXECUTE oder FILE_ALL_ACCESS angegeben ist.

Wenn eine nicht durchgeführte Anwendung CreateFileTransacted aufruft, wobei MAXIMUM_ALLOWED für lpSecurityAttributesangegeben ist, wird jedes Mal ein Handle mit derselben Zugriffsebene geöffnet. Wenn eine transacted-Anwendung CreateFileTransacted mit MAXIMUM_ALLOWED aufruft, die für lpSecurityAttributesangegeben ist, wird ein Handle mit einer unterschiedlichen Zugriffsmenge geöffnet, je nachdem, ob die Datei durch eine Transaktion gesperrt ist. Wenn die aufrufende Anwendung z. B. über FILE_EXECUTE Zugriffsebene für eine Datei verfügt, erhält die Anwendung diesen Zugriff nur, wenn die datei, die geöffnet wird, weder durch eine Transaktion gesperrt noch durch eine Transaktion gesperrt ist und die Anwendung bereits ein transacted Reader für diese Datei ist.

Eine vollständige Beschreibung der Transaktionen von Transaktionen finden Sie unter Transactional NTFS.

Verwenden Sie die CloseHandle--Funktion, um ein Objekthandle zu schließen, das von CreateFileTransacted zurückgegeben wird, wenn das Handle nicht mehr benötigt wird, und vor dem Commit oder Zurücksetzen der Transaktion.

Einige Dateisysteme, z. B. das NTFS-Dateisystem, unterstützen die Komprimierung oder Verschlüsselung für einzelne Dateien und Verzeichnisse. Bei Volumes, die für diese Art von Dateisystem formatiert sind, erbt eine neue Datei die Komprimierungs- und Verschlüsselungsattribute des Verzeichnisses.

Sie können CreateFileTransacted- nicht verwenden, um die Komprimierung in einer Datei oder einem Verzeichnis zu steuern. Weitere Informationen finden Sie unter Dateikomprimierung und Dekomprimierungund Dateiverschlüsselung.

Verhalten für symbolische Verknüpfungen – Wenn der Aufruf dieser Funktion eine neue Datei erstellt, gibt es keine Verhaltensänderung.

Wenn FILE_FLAG_OPEN_REPARSE_POINT angegeben ist:

  • Wenn eine vorhandene Datei geöffnet wird und es sich um eine symbolische Verknüpfung handelt, ist das zurückgegebene Handle ein Handle für die symbolische Verknüpfung.
  • Wenn TRUNCATE_EXISTING oder FILE_FLAG_DELETE_ON_CLOSE angegeben werden, handelt es sich bei der betroffenen Datei um eine symbolische Verknüpfung.
Wenn FILE_FLAG_OPEN_REPARSE_POINT nicht angegeben ist:
  • Wenn eine vorhandene Datei geöffnet wird und es sich um eine symbolische Verknüpfung handelt, handelt es sich bei dem zurückgegebenen Handle um ein Handle für das Ziel.
  • Wenn CREATE_ALWAYS, TRUNCATE_EXISTINGoder FILE_FLAG_DELETE_ON_CLOSE angegeben werden, ist die betroffene Datei das Ziel.
Ein Multisektor-Schreibvorgang ist nicht garantiert atomar, es sei denn, Sie verwenden eine Transaktion (d. a. das erstellte Handle ist ein Transaktionshandle). Ein sektorspezifischer Schreibvorgang ist atomar. Multisektor-Schreibvorgänge, die zwischengespeichert werden, werden möglicherweise nicht immer auf den Datenträger geschrieben; Geben Sie daher FILE_FLAG_WRITE_THROUGH an, um sicherzustellen, dass ein vollständiger Mehrsektor-Schreibvorgang ohne Zwischenspeicherung auf den Datenträger geschrieben wird.

Wie bereits erwähnt, kann das von CreateFileTransacted zurückgegebene Handle nicht von untergeordneten Prozessen geerbt werden, wenn der parameter lpSecurityAttributesNULList. Die folgenden Informationen zu diesem Parameter gelten ebenfalls:

  • Wenn bInheritHandle nicht FALSE-ist, bei dem es sich um einen Wert ungleich Null handelt, kann der Handle geerbt werden. Daher ist es wichtig, dass dieses Strukturelement ordnungsgemäß initialisiert wird, um false zu , wenn Sie nicht beabsichtigen, das Handle vererbbar zu sein.
  • Die Zugriffssteuerungslisten (Access Control Lists, ACL) im Standardsicherheitsdeskriptor für eine Datei oder ein Verzeichnis werden vom übergeordneten Verzeichnis geerbt.
  • Das Zieldateisystem muss die Sicherheit von Dateien und Verzeichnissen für die lpSecurityDescriptor- unterstützen, um auswirkungen darauf zu haben, was mithilfe von GetVolumeInformation bestimmt werden kann.
In Windows 8 und Windows Server 2012 wird diese Funktion von den folgenden Technologien unterstützt.
Technologie Abgestützt
Server Message Block (SMB) 3.0-Protokoll Nein
SMB 3.0 Transparent Failover (TFO) Nein
SMB 3.0 mit Skalierungsdateifreigaben (SO) Nein
Freigegebenes Clustervolumedateisystem (CsvFS) Nein
Resilient File System (ReFS) Nein
 

Beachten Sie, dass SMB 3.0 TxF nicht unterstützt.

Dateien

Wenn Sie versuchen, eine Datei auf einem Diskettenlaufwerk zu erstellen, das nicht über einen Diskettendatenträger oder ein CD-ROM Laufwerk verfügt, das keine CD enthält, zeigt das System eine Meldung an, dass der Benutzer einen Datenträger oder eine CD einfügt. Um zu verhindern, dass das System diese Meldung anzeigt, rufen Sie die SetErrorMode--Funktion mit SEM_FAILCRITICALERRORSauf.

Weitere Informationen finden Sie unter Erstellen und Öffnen von Dateien.

Wenn Sie eine Datei umbenennen oder löschen und diese dann kurz danach wiederherstellen, durchsucht das System den Cache nach Dateiinformationen, die wiederhergestellt werden sollen. Zwischengespeicherte Informationen umfassen das Kurz-/Lange-Namenspaar und die Erstellungszeit.

Wenn Sie CreateFileTransacted- für eine Datei aufrufen, die aufgrund eines vorherigen Aufrufs von DeleteFile-aussteht, schlägt die Funktion fehl. Das Betriebssystem verzögert das Löschen von Dateien, bis alle Handles für die Datei geschlossen werden. GetLastError- gibt ERROR_ACCESS_DENIEDzurück.

Der dwDesiredAccess Parameter kann null sein, sodass die Anwendung Dateiattribute abfragen kann, ohne auf die Datei zuzugreifen, wenn die Anwendung mit angemessenen Sicherheitseinstellungen ausgeführt wird. Dies ist nützlich, um das Vorhandensein einer Datei zu testen, ohne sie für Lese- und/oder Schreibzugriff zu öffnen oder andere Statistiken zu der Datei oder dem Verzeichnis zu erhalten. Siehe Abrufen und Festlegen von Dateiinformationen und GetFileInformationByHandle-.

Wenn eine Anwendung eine Datei in einem Netzwerk erstellt, ist es besser, GENERIC_READ | GENERIC_WRITE zu verwenden, als GENERIC_WRITE allein zu verwenden. Der resultierende Code ist schneller, da der Umleitungsmodul den Cache-Manager verwenden und weniger SMBs mit mehr Daten senden kann. Diese Kombination vermeidet auch ein Problem, bei dem das Schreiben in eine Datei in einem Netzwerk gelegentlich ERROR_ACCESS_DENIEDzurückgeben kann.

Dateistreams

Auf NTFS-Dateisystemen können Sie CreateFileTransacted- verwenden, um separate Datenströme in einer Datei zu erstellen.

Weitere Informationen finden Sie unter File Streams.

Verzeichnisse

Eine Anwendung kann ein Verzeichnis nicht mithilfe CreateFileTransacted-erstellen. Daher ist nur der OPEN_EXISTING Wert für dwCreationDisposition für diesen Anwendungsfall gültig. Zum Erstellen eines Verzeichnisses muss die Anwendung CreateDirectoryTransacted, CreateDirectory oder CreateDirectoryExaufrufen.

Um ein Verzeichnis mit CreateFileTransactedzu öffnen, geben Sie das FILE_FLAG_BACKUP_SEMANTICS Flag als Teil dwFlagsAndAttributesan. Geeignete Sicherheitsprüfungen gelten weiterhin, wenn dieses Kennzeichen ohne SE_BACKUP_NAME und SE_RESTORE_NAME Berechtigungen verwendet wird.

Wenn Sie CreateFileTransacted- verwenden, um ein Verzeichnis während der Defragmentierung eines FAT- oder FAT32-Dateisystemvolumes zu öffnen, geben Sie nicht das MAXIMUM_ALLOWED Zugriffsrecht an. Der Zugriff auf das Verzeichnis wird verweigert, wenn dies erfolgt. Geben Sie stattdessen den GENERIC_READ Zugriffsrecht an.

Weitere Informationen finden Sie unter Informationen zur Verzeichnisverwaltung.

Anmerkung

Der winbase.h-Header definiert CreateFileTransacted als Alias, der die ANSI- oder Unicode-Version dieser Funktion basierend auf der Definition der UNICODE-Präprozessorkonstante automatisch auswählt. Das Mischen der Verwendung des codierungsneutralen Alias mit Code, der nicht codierungsneutral ist, kann zu Nichtübereinstimmungen führen, die zu Kompilierungs- oder Laufzeitfehlern führen. Weitere Informationen finden Sie unter Konventionen für Funktionsprototypen.

Anforderungen

Anforderung Wert
mindestens unterstützte Client- Windows Vista [nur Desktop-Apps]
mindestens unterstützte Server- Windows Server 2008 [Nur Desktop-Apps]
Zielplattform- Fenster
Header- winbase.h (enthalten Windows.h)
Library Kernel32.lib
DLL- Kernel32.dll

Siehe auch

CloseHandle-

CopyFileTransacted-

CreateDirectoryTransacted-

DeleteFileTransacted-

Dateikomprimierung und Dekomprimierung

Dateiverschlüsselung

Dateiverwaltungsfunktionen

Dateisicherheit und Zugriffsberechtigungen

Dateistreams

FindFirstFileTransacted

Funktionen

GetFileAttributesTransacted-

MoveFileTransacted-

Übersichtsthemen

Überlegungen zur Programmierung für transaktionsbasierte NTFS-

ReadFile-

Transactional NTFS (TxF)

WriteFile-