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.
[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.
[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.
Attribut | Bedeutung |
---|---|
|
Die Datei sollte archiviert werden. Anwendungen verwenden dieses Attribut, um Dateien für die Sicherung oder Entfernung zu markieren. |
|
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. |
|
Die Datei ist ausgeblendet. Fügen Sie sie nicht in eine normale Verzeichnisauflistung ein. |
|
Für die Datei sind keine anderen Attribute festgelegt. Dieses Attribut ist nur gültig, wenn es allein verwendet wird. |
|
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. |
|
Die Datei ist schreibgeschützt. Anwendungen können die Datei lesen, aber nicht in die Datei schreiben oder löschen. |
|
Die Datei ist Teil oder wird ausschließlich von einem Betriebssystem verwendet. |
|
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 |
---|---|
|
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. |
|
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. |
|
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:
Eine Anwendung kann eine Volumensektorgröße ermitteln, indem sie die GetDiskFreeSpace--Funktion aufruft. |
|
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. |
|
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. |
|
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. |
|
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. |
|
Auf die Datei soll zufällig zugegriffen werden. Das System kann dies als Hinweis verwenden, um das Zwischenspeichern von Dateien zu optimieren. |
|
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. |
|
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. |
|
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.
[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.
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 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.
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.
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
Dateikomprimierung und Dekomprimierung
Dateisicherheit und Zugriffsberechtigungen
Funktionen
Übersichtsthemen
Überlegungen zur Programmierung für transaktionsbasierte NTFS-