Freigeben über


CreateFileW-Funktion (fileapi.h)

Erstellt oder öffnet eine Datei oder ein E/A-Gerät. Die am häufigsten verwendeten E/A-Geräte sind wie folgt: Datei, Dateidatenstrom, Verzeichnis, physischer Datenträger, Volume, Konsolenpuffer, Bandlaufwerk, Kommunikationsressource, Mailslot und Pipe. Die Funktion gibt ein Handle zurück, mit dem je nach Datei oder Gerät und den angegebenen Flags und Attributen für verschiedene E/A-Typen auf die Datei oder das Gerät zugegriffen werden kann.

Verwenden Sie die CreateFileTransacted--Funktion, um diesen Vorgang als transacted-Vorgang auszuführen, der zu einem Handle führt, das für Transaktionen verwendet werden kann.

Syntax

HANDLE CreateFileW(
  [in]           LPCWSTR               lpFileName,
  [in]           DWORD                 dwDesiredAccess,
  [in]           DWORD                 dwShareMode,
  [in, optional] LPSECURITY_ATTRIBUTES lpSecurityAttributes,
  [in]           DWORD                 dwCreationDisposition,
  [in]           DWORD                 dwFlagsAndAttributes,
  [in, optional] HANDLE                hTemplateFile
);

Parameter

[in] lpFileName

Der Name der zu erstellenden oder geöffneten Datei oder des Geräts. Sie können entweder Schrägstriche (/) oder umgekehrte Schrägstriche (\) in diesem Namen verwenden.

Informationen zu speziellen Gerätenamen finden Sie unter Definieren eines MS-DOS Gerätenamens.

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.

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.

[in] dwDesiredAccess

Der angeforderte Zugriff auf die Datei oder das Gerät, die als Lese-, Schreib-, Schreib- oder keine 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, File Security and Access Rights, File Access Rights Constantsund ACCESS_MASK.

Wenn dieser Parameter null ist, kann die Anwendung bestimmte Metadaten wie Datei-, Verzeichnis- oder Geräteattribute abfragen, ohne auf diese Datei oder das Gerät zuzugreifen, auch wenn GENERIC_READ Zugriff verweigert wurde.

Sie können keinen Zugriffsmodus anfordern, der mit dem Freigabemodus in Konflikt steht, der durch den dwShareMode Parameter in einer geöffneten Anforderung angegeben wird, die bereits über ein geöffnetes Handle verfügt.

Weitere Informationen finden Sie im Abschnitt "Hinweise" dieses Themas und Erstellen und Öffnen von Dateien.

[in] dwShareMode

Der angeforderte Freigabemodus der Datei oder des Geräts, der gelesen, geschrieben werden kann, beides, löschen, all diese oder keine (siehe die folgende Tabelle). Zugriffsanforderungen an Attribute oder erweiterte Attribute sind von diesem Flag nicht betroffen.

Wenn dieser Parameter null ist und CreateFile erfolgreich ist, kann die Datei oder das Gerät nicht freigegeben werden und erst wieder geöffnet werden, wenn das Handle für die Datei oder das Gerät geschlossen wird. Weitere Informationen finden Sie im Abschnitt "Hinweise".

Sie können keinen Freigabemodus anfordern, der mit dem Zugriffsmodus in Konflikt steht, der in einer vorhandenen Anforderung mit einem offenen Handle angegeben ist. CreateFile- fehlschlägt, und die GetLastError--Funktion würde ERROR_SHARING_VIOLATIONzurückgeben.

Um eine Datei oder ein Gerät freizugeben, während ein anderer Prozess die Datei oder das Gerät geöffnet hat, verwenden Sie eine kompatible Kombination aus einem oder mehreren der folgenden Werte. Weitere Informationen zu gültigen Kombinationen dieses Parameters mit dem parameter dwDesiredAccess finden Sie unter Creating and Opening Files.

Hinweis Die Freigabeoptionen für jedes geöffnete Handle bleiben wirksam, bis dieses Handle geschlossen wird, unabhängig vom Prozesskontext.
Wert Bedeutung
0
0x00000000
Verhindert nachfolgende Geöffnete Vorgänge auf einer Datei oder einem Gerät, wenn sie den Lösch-, Lese- oder Schreibzugriff anfordern.
FILE_SHARE_DELETE
0x00000004
Ermöglicht nachfolgenden Öffnenvorgängen auf einer Datei oder einem Gerät das Anfordern des Löschzugriffs.

Andernfalls kann kein Prozess die Datei oder das Gerät öffnen, wenn er den Löschzugriff anfordert.

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

Hinweis Löschzugriff ermöglicht sowohl Lösch- als auch Umbenennungsvorgänge.
FILE_SHARE_READ
0x00000001
Ermöglicht nachfolgenden Öffnenvorgängen auf einer Datei oder einem Gerät das Anfordern des Lesezugriffs.

Andernfalls kann kein Prozess die Datei oder das Gerät öffnen, wenn er Lesezugriff anfordert.

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

FILE_SHARE_WRITE
0x00000002
Ermöglicht nachfolgenden Öffnenvorgängen auf einer Datei oder einem Gerät das Anfordern des Schreibzugriffs.

Andernfalls kann kein Prozess die Datei oder das Gerät öffnen, wenn er Schreibzugriff anfordert.

Wenn dieses Flag nicht angegeben ist, aber die Datei oder das Gerät 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 zwei separate, aber verwandte Datenmember enthält: einen optionalen Sicherheitsdeskriptor und einen booleschen Wert, der bestimmt, ob das zurückgegebene Handle von untergeordneten Prozessen geerbt werden kann.

Dieser Parameter kann NULL-sein.

Wenn dieser Parameter NULL-ist, kann das von CreateFile zurückgegebene Handle nicht von untergeordneten Prozessen geerbt werden, die die Anwendung erstellen kann, und die datei oder das dem zurückgegebenen Handle zugeordnete Gerät erhält einen Standardsicherheitsdeskriptor.

Der lpSecurityDescriptor Element der Struktur gibt eine SECURITY_DESCRIPTOR für eine Datei oder ein Gerät an. Wenn dieses Element NULL-ist, wird der dem zurückgegebenen Handle zugeordnete Datei oder das gerät einem Standardsicherheitsdeskriptor zugewiesen.

CreateFile ignoriert das lpSecurityDescriptor Member beim Öffnen einer vorhandenen Datei oder eines vorhandenen Geräts, verwendet aber weiterhin das bInheritHandle Member.

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

Weitere Informationen finden Sie im Abschnitt "Hinweise".

[in] dwCreationDisposition

Eine Aktion, die auf einer Datei oder einem Gerät ausgeführt werden soll, die vorhanden ist oder nicht vorhanden ist.

Für andere Geräte als Dateien wird dieser Parameter in der Regel auf OPEN_EXISTINGfestgelegt.

Weitere Informationen finden Sie im Abschnitt "Hinweise".

Dieser Parameter muss eines 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 oder das angegebene Gerät nicht vorhanden ist, schlägt die Funktion fehl, und der letzte Fehlercode wird auf ERROR_FILE_NOT_FOUND (2) festgelegt.

Weitere Informationen zu Geräten finden Sie im Abschnitt "Hinweise".

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 Datei- oder Geräteattribute und -flags FILE_ATTRIBUTE_NORMAL der am häufigsten verwendete Standardwert für Dateien.

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 Datei- oder Gerätezwischenspeicherungsverhaltens, 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.

Hinweis Wenn CreateFile eine vorhandene Datei öffnet, kombiniert es in der Regel die Dateikennzeichnungen mit den Dateiattributen der vorhandenen Datei und ignoriert alle Dateiattribute, die als Teil dwFlagsAndAttributesbereitgestellt werden. Spezielle Fälle sind in Erstellen und Öffnen von Dateiendetailliert beschrieben.
Einige der folgenden Dateiattribute und Flags gelten möglicherweise nur für Dateien und nicht unbedingt alle anderen Gerätetypen, die CreateFile- öffnen können. Weitere Informationen finden Sie im Abschnitt "Hinweise" dieses Themas und Erstellen und Öffnen von Dateien.

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.

Dieses Kennzeichen wird in den Editionen Home, Home Premium, Starter oder ARM von Windows nicht unterstützt.

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.

Weitere Informationen finden Sie im Abschnitt Zwischenspeicherungsverhalten dieses Themas.

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 im Abschnitt "Hinweise".

FILE_FLAG_DELETE_ON_CLOSE
0x04000000
Die Datei muss unmittelbar gelöscht werden, nachdem alle Ziehpunkte geschlossen wurden, die das angegebene Handle und alle anderen geöffneten oder duplizierten Handles enthalten.

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 oder das Gerät wird ohne Systemzwischenspeicherung für Datenlese- und Schreibvorgänge geöffnet. Dieses Flag wirkt sich nicht auf das Zwischenspeichern der Festplatte oder die zugeordneten Speicherdateien aus.

Es gibt strenge Anforderungen für die erfolgreiche Arbeit mit Dateien, die mit CreateFile- mithilfe des FILE_FLAG_NO_BUFFERING-Flags geöffnet wurden, ausführliche Informationen finden Sie unter Dateipufferung.

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; CreateFile- 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.

Weitere Informationen finden Sie im Abschnitt "Hinweise".

FILE_FLAG_OVERLAPPED
0x40000000
Die Datei oder das Gerät wird für asynchrone E/A geöffnet oder erstellt.

Wenn nachfolgende E/A-Vorgänge für dieses Handle abgeschlossen werden, wird das in der OVERLAPPED Struktur angegebene Ereignis auf den signalierten Zustand festgelegt.

Wenn dieses Flag angegeben ist, kann die Datei für gleichzeitige Lese- und Schreibvorgänge verwendet werden.

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

Informationen zu Überlegungen bei der Verwendung eines mit diesem Flag erstellten Dateihandles finden Sie im Abschnitt Synchrone und asynchrone E/A-Handles dieses Themas.

FILE_FLAG_POSIX_SEMANTICS
0x01000000
Der Zugriff erfolgt nach POSIX-Regeln. 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
Access soll zufällig sein. Das System kann dies als Hinweis verwenden, um das Zwischenspeichern von Dateien zu optimieren.

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

Weitere Informationen finden Sie im Abschnitt Zwischenspeicherungsverhalten dieses Themas.

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
Access soll von Anfang bis Ende sequenziell sein. Das System kann dies als Hinweis verwenden, um das Zwischenspeichern von Dateien zu optimieren.

Dieses Flag sollte nicht verwendet werden, wenn Lesebehind (d. h. Umgekehrte Scans) verwendet werden.

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

Weitere Informationen finden Sie im Abschnitt Zwischenspeicherungsverhalten dieses Themas.

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

Weitere Informationen finden Sie im Abschnitt Zwischenspeicherungsverhaltens dieses Themas.

Der dwFlagsAndAttributes Parameter kann auch SQOS-Informationen 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 CreateFile diesen Parameter.

Beim Öffnen einer neuen verschlüsselten Datei erbt die Datei die diskretionäre Zugriffssteuerungsliste aus dem übergeordneten Verzeichnis. Weitere Informationen finden Sie unter Dateiverschlüsselung.

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, ist der Rückgabewert INVALID_HANDLE_VALUE. Rufen Sie GetLastErrorauf, um erweiterte Fehlerinformationen zu erhalten.

Bemerkungen

CreateFile- wurde ursprünglich speziell für die Dateiinteraktion entwickelt, wurde jedoch seitdem erweitert und erweitert, um die meisten anderen Typen von E/A-Geräten und Mechanismen einzuschließen, die windows-Entwicklern zur Verfügung stehen. In diesem Abschnitt wird versucht, die unterschiedlichen Probleme abzudecken, die Entwickler bei der Verwendung von CreateFile- in verschiedenen Kontexten und mit verschiedenen E/A-Typen haben können. Der Text versucht, das Wort Datei zu verwenden, nur dann, wenn er sich speziell auf Daten bezieht, die in einer tatsächlichen Datei in einem Dateisystem gespeichert sind. Einige Verwendungen von Datei verweisen jedoch möglicherweise allgemeiner auf ein E/A-Objekt, das dateiähnliche Mechanismen unterstützt. Diese liberale Verwendung des Begriffs Datei ist aufgrund der zuvor erwähnten historischen Gründe besonders in Konstantennamen und Parameternamen verbreitet.

Wenn eine Anwendung mit dem von CreateFilezurückgegebenen Objekthandle fertig ist, verwenden Sie die CloseHandle--Funktion, um das Handle zu schließen. Dies gibt nicht nur Systemressourcen frei, sondern kann einen größeren Einfluss auf Dinge wie das Freigeben der Datei oder des Geräts und das Commit von Daten auf dem Datenträger haben. Einzelheiten werden in diesem Thema entsprechend aufgeführt.

Windows Server 2003 und Windows XP: Ein Freigabeverstoß tritt auf, wenn versucht wird, eine Datei oder ein Verzeichnis zum Löschen auf einem Remotecomputer zu öffnen, wenn der Wert des dwDesiredAccess Parameter die DELETE Zugriffskennzeichnung (0x00010000) ODER"mit jeder anderen Zugriffskennzeichnung", und die Remotedatei oder das Verzeichnis wurde nicht mit FILE_SHARE_DELETEgeöffnet. Um die Freigabeverletzung in diesem Szenario zu vermeiden, öffnen Sie die Remotedatei oder das Verzeichnis nur mit dem DELETE Zugriffsrecht, oder rufen Sie DeleteFile- auf, ohne zuerst die Datei oder das Verzeichnis zum Löschen zu öffnen.

Einige Dateisysteme, z. B. das NTFS-Dateisystem, unterstützen die Komprimierung oder Verschlüsselung für einzelne Dateien und Verzeichnisse. Auf Volumes, die über ein bereitgestelltes Dateisystem mit dieser Unterstützung verfügen, erbt eine neue Datei die Komprimierungs- und Verschlüsselungsattribute des Verzeichnisses.

Sie können CreateFile- nicht verwenden, um Komprimierung, Dekomprimierung oder Entschlüsselung in einer Datei oder einem Verzeichnis zu steuern. Weitere Informationen finden Sie unter Erstellen und Öffnen von Dateien, Dateikomprimierung und Dekomprimierungund Dateiverschlüsselung.

Windows Server 2003 und Windows XP: Aus Gründen der Abwärtskompatibilität wendet CreateFile- keine Vererbungsregeln an, wenn Sie einen Sicherheitsdeskriptor in lpSecurityAttributesangeben. Um die Vererbung zu unterstützen, können Funktionen, die später den Sicherheitsdeskriptor dieser Datei abfragen, heuristisch bestimmen und melden, dass die Vererbung wirksam ist. Weitere Informationen finden Sie unter automatische Verteilung von vererbbaren ACEs.

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

  • Wenn die bInheritHandle Membervariable nicht FALSE-ist, bei dem es sich um einen wert ungleich Null handelt, kann das 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 das lpSecurityDescriptor Member unterstützen, um auswirkungen darauf zu haben, was mithilfe von GetVolumeInformationbestimmt 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 Ja
SMB 3.0 Transparent Failover (TFO) Siehe Anmerkungen
SMB 3.0 mit Skalierungsdateifreigaben (SO) Siehe Anmerkungen
Freigegebenes Clustervolumedateisystem (CsvFS) Ja
Resilient File System (ReFS) Ja

Beachten Sie, dass CreateFile- mit übergeordneter Löschung fehlschlägt, wenn sie für eine Datei ausgeführt wird, in der bereits ein offener alternativer Datenstrom vorhanden ist.

Verhalten symbolischer Verknüpfungen

Wenn der Aufruf dieser Funktion eine Datei erstellt, gibt es keine Verhaltensänderung. Beachten Sie außerdem die folgenden Informationen zu FILE_FLAG_OPEN_REPARSE_POINT:
  • 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.

Zwischenspeicherungsverhalten

Mehrere der möglichen Werte für den dwFlagsAndAttributes Parameter werden von CreateFile- verwendet, um zu steuern oder zu beeinflussen, wie die dem Handle zugeordneten Daten vom System zwischengespeichert werden. Sie sind:
  • FILE_FLAG_NO_BUFFERING
  • FILE_FLAG_RANDOM_ACCESS
  • FILE_FLAG_SEQUENTIAL_SCAN
  • FILE_FLAG_WRITE_THROUGH
  • FILE_ATTRIBUTE_TEMPORARY
Wenn keine dieser Flags angegeben ist, verwendet das System ein standardmäßiges allgemeines Zwischenspeicherungsschema. Andernfalls verhält sich die Systemzwischenspeicherung wie für jedes Flag angegeben.

Einige dieser Kennzeichen sollten nicht kombiniert werden. Zum Beispiel ist die Kombination von FILE_FLAG_RANDOM_ACCESS mit FILE_FLAG_SEQUENTIAL_SCAN selbst zu besiegen.

Die Angabe des FILE_FLAG_SEQUENTIAL_SCAN-Flags kann die Leistung für Anwendungen erhöhen, die große Dateien mit sequenziellem Zugriff lesen. Leistungssteigerungen können für Anwendungen, die große Dateien hauptsächlich sequenziell lesen, noch deutlicher sein, aber gelegentlich über kleine Bytebereiche vorwärts springen. Wenn eine Anwendung den Dateizeiger für den zufälligen Zugriff verschiebt, tritt höchstwahrscheinlich keine optimale Zwischenspeicherungsleistung auf. Der korrekte Betrieb ist jedoch weiterhin gewährleistet.

Die Kennzeichen FILE_FLAG_WRITE_THROUGH und FILE_FLAG_NO_BUFFERING sind unabhängig und können kombiniert werden.

Wenn FILE_FLAG_WRITE_THROUGH verwendet wird, aber FILE_FLAG_NO_BUFFERING nicht ebenfalls angegeben ist, sodass das Zwischenspeichern des Systems wirksam ist, werden die Daten in den Systemcache geschrieben, aber ohne Verzögerung auf den Datenträger geleert.

Wenn FILE_FLAG_WRITE_THROUGH und FILE_FLAG_NO_BUFFERING angegeben sind, sodass das Zwischenspeichern des Systems nicht wirksam ist, werden die Daten sofort auf den Datenträger geleert, ohne den Windows-Systemcache zu durchlaufen. Das Betriebssystem fordert außerdem einen Schreibvorgang des lokalen Hardwarecaches der Festplatte auf persistente Medien an.

Hinweis Nicht alle Festplattenhardware unterstützt diese Schreibzugriffsfunktion.
Die ordnungsgemäße Verwendung des FILE_FLAG_NO_BUFFERING-Flags erfordert besondere Anwendungsüberlegungen. Weitere Informationen finden Sie unter Dateipufferung.

Eine Schreib-Through-Anforderung über FILE_FLAG_WRITE_THROUGH führt auch dazu, dass NTFS metadatenänderungen, z. B. ein Zeitstempelupdate oder einen Umbenennungsvorgang, die aus der Verarbeitung der Anforderung resultieren, leeren. Aus diesem Grund wird das FILE_FLAG_WRITE_THROUGH-Flag häufig mit dem FILE_FLAG_NO_BUFFERING Flag als Ersatz für das Aufrufen der FlushFileBuffers Funktion nach jedem Schreiben verwendet, was unnötige Leistungseinbußen verursachen kann. Durch die gemeinsame Verwendung dieser Kennzeichnungen werden diese Sanktionen vermieden. Allgemeine Informationen zum Zwischenspeichern von Dateien und Metadaten finden Sie unter Dateizwischenspeicherung.

Wenn FILE_FLAG_NO_BUFFERING mit FILE_FLAG_OVERLAPPEDkombiniert wird, bieten die Flags eine maximale asynchrone Leistung, da die E/A nicht auf die synchronen Vorgänge des Speicher-Managers basiert. 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 (z. B. beim Erstellen einer leeren Datei). Um sicherzustellen, dass die Metadaten auf den Datenträger geleert werden, verwenden Sie die FlushFileBuffers--Funktion.

Die Angabe des FILE_ATTRIBUTE_TEMPORARY Attributs bewirkt, dass Dateisysteme das Schreiben von Daten in den Massenspeicher vermeiden, wenn genügend Cachespeicher verfügbar ist, da eine Anwendung eine temporäre Datei löscht, nachdem ein Handle geschlossen wurde. In diesem Fall kann das System das Schreiben der Daten vollständig vermeiden. Obwohl die Datenzwischenspeicherung nicht auf die gleiche Weise wie die zuvor erwähnten Flags gesteuert wird, weist das attribut FILE_ATTRIBUTE_TEMPORARY das System an, so viel wie möglich im Systemcache zu speichern, ohne zu schreiben und daher für bestimmte Anwendungen zu sorgen.

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 CreateFile- 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 CREATE_ALWAYS und FILE_ATTRIBUTE_NORMAL angegeben werden, schlägt CreateFile- fehl und legt den letzten Fehler auf ERROR_ACCESS_DENIED fest, wenn die Datei vorhanden ist und das attribut FILE_ATTRIBUTE_HIDDEN oder FILE_ATTRIBUTE_SYSTEM aufweist. Um den Fehler zu vermeiden, geben Sie dieselben Attribute wie die vorhandene Datei an.

Wenn eine Anwendung eine Datei in einem Netzwerk erstellt, empfiehlt es sich, GENERIC_READ | GENERIC_WRITE für dwDesiredAccess- 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.

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

synchrone und asynchrone E/A-Handles

CreateFile- stellt das Erstellen einer Datei oder eines Gerätehandle bereit, die synchron oder asynchron ist. Ein synchroner Handle verhält sich so, dass E/A-Funktionsaufrufe mit diesem Handle blockiert werden, bis sie abgeschlossen sind, während ein asynchroner Dateihandle es dem System ermöglicht, sofort von E/A-Funktionsaufrufen zurückzugeben, unabhängig davon, ob er den E/A-Vorgang abgeschlossen hat oder nicht. Wie bereits erwähnt, wird dieses synchrone und asynchrone Verhalten durch Angeben FILE_FLAG_OVERLAPPED innerhalb des dwFlagsAndAttributes-Parameters bestimmt. Bei der Verwendung asynchroner E/A-Vorgänge gibt es mehrere Komplexitäten und potenzielle Fallstricke; weitere Informationen finden Sie unter Synchrone und asynchrone E/A-.

Dateistreams

Auf NTFS-Dateisystemen können Sie CreateFile- 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 CreateFile-erstellen. Daher ist nur der OPEN_EXISTING Wert für dwCreationDisposition für diesen Anwendungsfall gültig. Zum Erstellen eines Verzeichnisses muss die Anwendung CreateDirectory oder CreateDirectoryEx-aufrufen.

Um ein Verzeichnis mit CreateFile-zu ö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 CreateFile- zum Öffnen eines Verzeichnisses während der Defragmentierung eines FAT- oder FAT32-Dateisystemvolumes verwenden, 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.

physische Datenträger und Volumes

Der direkte Zugriff auf den Datenträger oder auf ein Volume ist eingeschränkt.

Windows Server 2003 und Windows XP: Direkter Zugriff auf den Datenträger oder auf ein Volume ist auf diese Weise nicht eingeschränkt.

Sie können die CreateFile--Funktion verwenden, um ein physisches Laufwerk oder ein Volume zu öffnen, das ein DASD-Handle (Direct Access Storage Device Device) zurückgibt, das mit der DeviceIoControl--Funktion verwendet werden kann. Auf diese Weise können Sie direkt auf den Datenträger oder das Volume zugreifen, z. B. Datenträgermetadaten wie die Partitionstabelle. Dieser Zugriffstyp macht jedoch auch das Laufwerk oder volume für potenzielle Datenverluste verfügbar, da ein falscher Schreibzugriff auf einen Datenträger mit diesem Mechanismus den Inhalt des Betriebssystems beeinträchtigen könnte. Um die Datenintegrität sicherzustellen, sollten Sie sich mit DeviceIoControl vertraut machen und wie sich andere APIs mit einem direkten Zugriffshandle anders verhalten als mit einem Dateisystemhandle.

Die folgenden Anforderungen müssen erfüllt sein, damit ein solcher Aufruf erfolgreich ist:

  • Der Aufrufer muss über Administratorrechte verfügen. Weitere Informationen finden Sie unter Ausführen mit speziellen Rechten.
  • Der parameter dwCreationDisposition muss das OPEN_EXISTING Flag aufweisen.
  • Beim Öffnen eines Volume- oder Diskettendatenträgers muss der parameter dwShareMode das FILE_SHARE_WRITE Flag aufweisen.
Hinweis Der parameter dwDesiredAccess kann null sein, sodass die Anwendung Geräteattribute abfragen kann, ohne auf ein Gerät zuzugreifen. Dies ist nützlich für eine Anwendung, um die Größe eines Diskettenlaufwerks und die unterstützten Formate zu ermitteln, ohne dass beispielsweise ein Diskettenlaufwerk auf einem Laufwerk erforderlich ist. Sie kann auch zum Lesen von Statistiken verwendet werden, ohne dass Lese-/Schreibberechtigungen für Daten auf höherer Ebene erforderlich sind.
Beim Öffnen eines physischen Laufwerks x:, sollte die lpFileName- Zeichenfolge die folgende Form aufweisen: "\\.\PhysicalDriveX". Festplattennummern beginnen bei Null. Die folgende Tabelle enthält einige Beispiele für physische Laufwerkzeichenfolgen.
Schnur Bedeutung
"\\.\PhysicalDrive0" Öffnet das erste physische Laufwerk.
"\\.\PhysicalDrive2" Öffnet das dritte physische Laufwerk.

Um den physischen Laufwerkbezeichner für ein Volume abzurufen, öffnen Sie ein Handle für das Volume, und rufen Sie die DeviceIoControl--Funktion mit IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTSauf. Dieser Steuercode gibt die Datenträgernummer und den Offset für jedes Volume eines oder mehrere Ausmaße zurück. Ein Volume kann mehrere physische Datenträger umfassen.

Ein Beispiel zum Öffnen eines physischen Laufwerks finden Sie unter Calling DeviceIoControl.

Beim Öffnen eines Volume- oder Wechselmedienlaufwerks (z. B. eines Diskettenlaufwerks oder flash-Speicherfingersticks) sollte die lpFileName- Zeichenfolge die folgende Form aufweisen: "\\.\X:". Verwenden Sie keinen nachfolgenden umgekehrten Schrägstrich (\), der das Stammverzeichnis eines Laufwerks angibt. Die folgende Tabelle enthält einige Beispiele für Laufwerkszeichenfolgen.

Schnur Bedeutung
"\\.\A:" Öffnet Diskettenlaufwerk A.
"\\.\C:" Öffnet das Volume "C:".
"\\.\C:\" Öffnet das Dateisystem des C:-Volumes.

Sie können ein Volume auch öffnen, indem Sie auf den Volumenamen verweisen. Weitere Informationen finden Sie unter Benennen eines Volumes.

Ein Volume enthält ein oder mehrere bereitgestellte Dateisysteme. Volume handles can be open as noncached at the discretion of the particular file system, even when the noncached option is not specified in CreateFile. Sie sollten davon ausgehen, dass alle Microsoft-Dateisysteme Volumehandles als nicht zwischengespeichert öffnen. Die Einschränkungen für nicht zwischengespeicherte E/A für Dateien gelten auch für Volumes.

Ein Dateisystem erfordert möglicherweise eine Pufferausrichtung, obwohl die Daten nicht zwischengespeichert sind. Wenn die Option ohne Zwischenspeicherung beim Öffnen eines Volumes angegeben wird, wird die Pufferausrichtung unabhängig vom Dateisystem auf dem Volume erzwungen. Es wird für alle Dateisysteme empfohlen, die Volumehandles als nicht zwischengespeichert zu öffnen und die einschränkungen für nicht zwischengespeicherte E/A zu befolgen.

Note To read or write to the last few sectors of the volume, you must call DeviceIoControl and specify FSCTL_ALLOW_EXTENDED_DASD_IO. Dadurch wird der Dateisystemtreiber signalisiert, keine E/A-Begrenzungsprüfungen für Lese- oder Schreibaufrufe der Partition durchzuführen. Stattdessen werden Begrenzungsprüfungen vom Gerätetreiber ausgeführt.

Änderungsgerät

Die IOCTL_CHANGER_* Steuercodes für DeviceIoControl ein Handle an ein Änderungsgerät akzeptieren. Verwenden Sie zum Öffnen eines Änderungsgeräts einen Dateinamen des folgenden Formulars: "\\.\Changerx", wobei x eine Zahl ist, die angibt, welches Gerät geöffnet werden soll, beginnend mit Null. Wenn Sie das Änderungsgerät in einer Anwendung öffnen möchten, die in C oder C++ geschrieben wurde, verwenden Sie den folgenden Dateinamen: "\\\\.\\Changer0".

Bandlaufwerke

Sie können Bandlaufwerke mit einem Dateinamen des folgenden Formulars öffnen: "\\.\TAPEx" wobei x eine Zahl ist, die angibt, welches Laufwerk geöffnet werden soll, beginnend mit Bandlaufwerk Null. Wenn Sie das Bandlaufwerk null in einer Anwendung öffnen möchten, die in C oder C++ geschrieben wurde, verwenden Sie den folgenden Dateinamen: "\\\\.\TAPE0".

Weitere Informationen finden Sie unter Sicherung.

Kommunikationsressourcen

Die CreateFile--Funktion kann ein Handle für eine Kommunikationsressource erstellen, z. B. den seriellen Port COM1. Für Kommunikationsressourcen muss der parameter dwCreationDispositionOPEN_EXISTINGsein, der parameter dwShareMode muss null (exklusiver Zugriff) sein, und der hTemplateFile- Parameter muss NULLsein. Lese-, Schreib- oder Lese-/Schreibzugriff kann angegeben werden, und der Handle kann für überlappende E/A geöffnet werden.

Um eine COM-Portnummer anzugeben, die größer als 9 ist, verwenden Sie die folgende Syntax: "\.\COM10". Diese Syntax funktioniert für alle Portnummern und Hardware, mit denen COM-Portnummern angegeben werden können.

Weitere Informationen zur Kommunikation finden Sie unter Communications.

Konsolen

Die CreateFile--Funktion kann ein Handle für die Konsoleneingabe (CONIN$) erstellen. Wenn der Prozess durch Vererbung oder Duplizierung über ein offenes Handle verfügt, kann er auch einen Handle für den aktiven Bildschirmpuffer (CONOUT$) erstellen. Der Aufrufvorgang muss an eine geerbte Konsole oder eine angefügt werden, die von der AllocConsole-Funktion zugewiesen wurde. Legen Sie für Konsolenhandles die parameter CreateFile wie folgt fest.
Parameter Wert
lpFileName- Verwenden Sie den CONIN$-Wert, um die Konsoleneingabe anzugeben.

Verwenden Sie den CONOUT$-Wert, um die Konsolenausgabe anzugeben.

CONIN$ erhält ein Handle für den Konsoleneingabepuffer, auch wenn das SetStdHandle--Funktion den Standardeingabepunkt umleitet. Verwenden Sie zum Abrufen des standardeingabehandles die GetStdHandle--Funktion.

CONOUT$ ruft einen Handle zum aktiven Bildschirmpuffer ab, auch wenn SetStdHandle den Standardausgabehandle umleitet. Verwenden Sie zum Abrufen des standardausgabehandles GetStdHandle.

dwDesiredAccess GENERIC_READ | GENERIC_WRITE wird bevorzugt, kann jedoch entweder den Zugriff einschränken.
dwShareMode- Geben Sie beim Öffnen von CONIN$FILE_SHARE_READan. Geben Sie beim Öffnen von CONOUT$FILE_SHARE_WRITEan.

Wenn der aufrufende Prozess die Konsole erbt oder ein untergeordneter Prozess auf die Konsole zugreifen kann, muss dieser Parameter FILE_SHARE_READ | FILE_SHARE_WRITEsein.

lpSecurityAttributes Wenn die Konsole geerbt werden soll, muss das bInheritHandle- Mitglied der SECURITY_ATTRIBUTES-Struktur TRUE-sein.
dwCreationDisposition Sie sollten OPEN_EXISTING angeben, wenn Sie CreateFile- zum Öffnen der Konsole verwenden.
dwFlagsAndAttributes Ignoriert.
hTemplateFile- Ignoriert.

In der folgenden Tabelle sind verschiedene Einstellungen dwDesiredAccess und lpFileNameaufgeführt.

lpFileName- dwDesiredAccess Ergebnis
"CON" GENERIC_READ Öffnet die Konsole für Eingaben.
"CON" GENERIC_WRITE Öffnet die Konsole für die Ausgabe.
"CON" GENERIC_READ | GENERIC_WRITE Bewirkt, dass CreateFile- fehlschlägt; GetLastError- gibt ERROR_FILE_NOT_FOUNDzurück.

Mailslots

Wenn CreateFile das Clientende eines Maillots öffnet, gibt die Funktion INVALID_HANDLE_VALUE zurück, wenn der Maillot-Client versucht, einen lokalen Maillot zu öffnen, bevor der Maillot-Server es mit der CreateMailSlot-Funktion erstellt hat.

Weitere Informationen finden Sie unter Mailslots.

Rohre

Wenn CreateFile das Clientende einer benannten Pipe öffnet, verwendet die Funktion eine Instanz der benannten Pipe, die sich im Überwachungszustand befindet. Der Öffnungsprozess kann das Handle beliebig oft duplizieren, aber nach dem Öffnen kann die benannte Pipeinstanz nicht von einem anderen Client geöffnet werden. Der Zugriff, der beim Öffnen einer Pipe angegeben wird, muss mit dem Zugriff kompatibel sein, der im dwOpenMode Parameter der CreateNamedPipe--Funktion angegeben ist.

Wenn die CreateNamedPipe--Funktion vor diesem Vorgang nicht erfolgreich auf dem Server aufgerufen wurde, ist keine Pipe vorhanden, und CreateFile- mit ERROR_FILE_NOT_FOUNDfehlschlägt.

Wenn mindestens eine aktive Pipeinstanz vorhanden ist, es aber keine verfügbaren Listenerpipelinen auf dem Server gibt, was bedeutet, dass alle Pipeinstanzen derzeit verbunden sind, schlägt CreateFile- mit ERROR_PIPE_BUSYfehl.

Weitere Informationen finden Sie unter Pipes.

Beispiele

Beispieldateivorgänge werden in den folgenden Themen gezeigt:

Physische Geräte-E/A werden in den folgenden Themen veranschaulicht: Ein Beispiel mit benannten Rohren befindet sich in Named Pipe Client.

Das Arbeiten mit einem Maillot wird in Schreiben in ein Maillotangezeigt.

Ein Codeausschnitt für bandsicherungscode finden Sie unter Creating a Backup Application.

Anmerkung

Der Fileapi.h-Header definiert CreateFile 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 XP [nur Desktop-Apps]
mindestens unterstützte Server- Windows Server 2003 [Nur Desktop-Apps]
Zielplattform- Fenster
Header- fileapi.h (include Windows.h)
Library Kernel32.lib
DLL- Kernel32.dll

Siehe auch

Informationen zur Verzeichnisverwaltung

Informationen zum Volumeverwaltungs-

Sicherung

CloseHandle-

Kommunikation

CreateDirectory-

CreateDirectoryEx-

CreateFileTransacted-

CreateMailSlot-

CreateNamedPipe-

Erstellen, Löschen und Verwalten von Dateien

DeleteFile-

Geräteeingabe- und Ausgabesteuerung (IOCTL)

DeviceIoControl-

Dateikomprimierung und Dekomprimierung

Dateiverschlüsselung

Dateiverwaltungsfunktionen

Dateisicherheit und Zugriffsberechtigungen

Dateistreams

Funktionen

GetLastError-

E/A-Vervollständigungsports

E/A-Konzepte

Maillots

Abrufen und Festlegen von Dateiinformationen

Übersichtsthemen

Pipes

ReadFile-

ReadFileEx-

ausführung mit speziellen Rechten

SetFileAttributes-

WriteFile-

WriteFileEx-