Freigeben über


ReOpenFile-Funktion (winbase.h)

Öffnet das angegebene Dateisystemobjekt mit unterschiedlichen Zugriffsrechten, Freigabemodi und Flags erneut.

Syntax

HANDLE ReOpenFile(
  [in] HANDLE hOriginalFile,
  [in] DWORD  dwDesiredAccess,
  [in] DWORD  dwShareMode,
  [in] DWORD  dwFlagsAndAttributes
);

Parameter

[in] hOriginalFile

Ein Handle für das erneut zu öffnende Objekt. Das Objekt muss von der CreateFile-Funktion erstellt worden sein.

[in] dwDesiredAccess

Der erforderliche Zugriff auf das Objekt. Eine Liste der Werte finden Sie unter Dateisicherheit und Zugriffsrechte. Sie können keinen Zugriffsmodus anfordern, der mit dem in einer vorherigen offenen Anforderung angegebenen Freigabemodus in Konflikt steht, dessen Handle noch geöffnet ist.

Wenn dieser Parameter null (0) ist, kann die Anwendung Geräteattribute abfragen, ohne auf das Gerät zuzugreifen. Dies ist nützlich, wenn eine Anwendung die Größe eines Diskettenlaufwerks und die unterstützten Formate bestimmen möchte, ohne dass eine Diskette im Laufwerk erforderlich ist.

[in] dwShareMode

Der Freigabemodus des Objekts. Sie können keinen Freigabemodus anfordern, der mit dem in einer früheren offenen Anforderung angegebenen Zugriffsmodus in Konflikt steht, dessen Handle noch geöffnet ist.

Wenn dieser Parameter null (0) ist und CreateFile erfolgreich ist, kann das Objekt nicht freigegeben werden und kann erst wieder geöffnet werden, wenn das Handle geschlossen ist.

Damit andere Prozesse das Objekt freigeben können, während es in Ihrem Prozess geöffnet ist, verwenden Sie eine Kombination aus einem oder mehreren der folgenden Werte, um den Typ des Zugriffs anzugeben, den sie beim Öffnen des Objekts anfordern können. Diese Freigabeoptionen bleiben wirksam, bis Sie das Handle für das Objekt schließen.

Wert Bedeutung
FILE_SHARE_DELETE
0x00000004
Ermöglicht nachfolgende geöffnete Vorgänge für das Objekt, um den Löschzugriff anzufordern. Andernfalls können andere Prozesse das Objekt nicht öffnen, wenn sie Löschzugriff anfordern.

Wenn das Objekt bereits mit Löschzugriff geöffnet wurde, muss der Freigabemodus dieses Flag enthalten.

FILE_SHARE_READ
0x00000001
Ermöglicht nachfolgende geöffnete Vorgänge für das Objekt, um Lesezugriff anzufordern. Andernfalls können andere Prozesse das Objekt nicht öffnen, wenn sie Lesezugriff anfordern.

Wenn das Objekt bereits mit Lesezugriff geöffnet wurde, muss der Freigabemodus dieses Flag enthalten.

FILE_SHARE_WRITE
0x00000002
Ermöglicht nachfolgende geöffnete Vorgänge für das Objekt, um Schreibzugriff anzufordern. Andernfalls können andere Prozesse das Objekt nicht öffnen, wenn sie Schreibzugriff anfordern.

Wenn das Objekt bereits mit Schreibzugriff geöffnet wurde, muss der Freigabemodus dieses Flag enthalten.

[in] dwFlagsAndAttributes

Die Dateiflags. Dieser Parameter kann einen oder mehrere der folgenden Werte aufweisen.

Wert Bedeutung
FILE_FLAG_BACKUP_SEMANTICS
0x02000000
Gibt an, dass die Datei für einen Sicherungs- oder Wiederherstellungsvorgang geöffnet oder erstellt wird. Das System stellt sicher, dass der aufrufende Prozess Dateisicherheitsprüfungen außer Kraft setzt, vorausgesetzt, er verfügt über die SE_BACKUP_NAME - und SE_RESTORE_NAME-Berechtigungen . Weitere Informationen finden Sie unter Ändern von Berechtigungen in einem Token.

Sie können dieses Flag auch festlegen, um ein Handle für ein Verzeichnis abzurufen. Sofern angegeben, kann ein Verzeichnishandle anstelle eines Dateihandles an einige Funktionen übergeben werden.

FILE_FLAG_DELETE_ON_CLOSE
0x04000000
Gibt an, dass das Betriebssystem die Datei sofort nach dem Schließen aller Handles löschen soll, nicht nur das angegebene Handle, sondern auch alle anderen geöffneten oder duplizierten Handles.

Nachfolgende offene Anforderungen für die Datei schlagen fehl, es sei denn , FILE_SHARE_DELETE wird verwendet.

FILE_FLAG_NO_BUFFERING
0x20000000
Weist das System an, die Datei ohne Zwischenpufferung oder Zwischenspeicherung zu öffnen. In Kombination mit FILE_FLAG_OVERLAPPED sorgt das Flag für maximale asynchrone Leistung, da die E/A-Vorgänge nicht von den synchronen Vorgängen des Speicher-Managers abhängig sind. Einige E/A-Vorgänge dauern jedoch länger, da die Daten nicht im Cache gespeichert werden.

Eine Anwendung muss bestimmte Anforderungen erfüllen, wenn sie mit Dateien arbeiten, die mit FILE_FLAG_NO_BUFFERING geöffnet werden:

  • Der Dateizugriff muss mit Byteoffsets innerhalb der Datei beginnen, die ganzzahlige Vielfache der Volumensektorgröße sind.
  • Der Dateizugriff muss für die Anzahl von Bytes gelten, die ganzzahlige Vielfache der Volumensektorgröße sind. Wenn die Sektorgröße beispielsweise 512 Bytes beträgt, kann eine Anwendung Lese- und Schreibvorgänge von 512, 1024, 1536 oder 2048 Bytes anfordern, aber nicht von 335, 981 oder 7171 Bytes.
  • Pufferadressen für Lese- und Schreibvorgänge sollten sektorseitig ausgerichtet sein (ausgerichtet auf Adressen im Arbeitsspeicher, die ganzzahlige Vielfache der Volumensektorgröße sind). Je nach Datenträger kann diese Anforderung nicht erzwungen werden.
Eine Möglichkeit zum Ausrichten von Puffern auf ganzzahligen Vielfachen der Volumesektorgröße besteht darin , VirtualAlloc zum Zuweisen der Puffer zu verwenden. Es ordnet Arbeitsspeicher zu, der an Adressen ausgerichtet ist, die ganzzahlige Vielfache der Größe der Betriebssystemspeicherseite sind. Da sowohl die Größe des Speicherseiten- als auch des Volumesektors 2 beträgt, wird dieser Arbeitsspeicher auch an Adressen ausgerichtet, die ganzzahlige Vielfache einer Volumesektorgröße sind. Speicherseiten sind 4-8 KB groß; Sektoren sind 512 Bytes (Festplatten) oder 2048 Bytes (CD), daher dürfen Volumesektoren niemals größer als Speicherseiten sein.

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

FILE_FLAG_OPEN_NO_RECALL
0x00100000
Gibt an, dass die Dateidaten angefordert, aber weiterhin im Remotespeicher gespeichert werden sollen. Es sollte nicht zurück in den lokalen Speicher transportiert werden. Dieses Flag ist für die Verwendung durch Remotespeichersysteme vorgesehen.
FILE_FLAG_OPEN_REPARSE_POINT
0x00200000
Wenn dieses Flag verwendet wird, erfolgt die normale Analysepunktverarbeitung nicht, und ReOpenFile 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
Weist das System an, das Objekt zu initialisieren, sodass Vorgänge, für die die Verarbeitung einen erheblichen Zeitraum in Anspruch nimmt, ERROR_IO_PENDING zurückgeben. Wenn der Vorgang abgeschlossen ist, wird das angegebene Ereignis auf den Signalzustand festgelegt.

Wenn Sie FILE_FLAG_OVERLAPPED angeben, müssen die Lese- und Schreibfunktionen der Datei eine ÜBERLAPPENDE Struktur angeben. Das heißt, wenn FILE_FLAG_OVERLAPPED angegeben wird, muss eine Anwendung überlappende Lese- und Schreibvorgänge ausführen.

Wenn FILE_FLAG_OVERLAPPED angegeben wird, behält das System den Dateizeiger nicht bei. Die Dateiposition muss als Teil des parameters lpOverlapped (der auf eine OVERLAPPED-Struktur verweist) an die Lese- und Schreibfunktionen der Datei übergeben werden.

Dieses Flag ermöglicht auch, dass mehrere Vorgänge gleichzeitig mit dem Handle ausgeführt werden können (z. B. ein gleichzeitiger Lese- und Schreibvorgang).

FILE_FLAG_POSIX_SEMANTICS
0x01000000
Gibt an, dass auf die Datei gemäß POSIX-Regeln zugegriffen werden soll. Dies schließt das Zulassen mehrerer Dateien mit Namen ein, die sich nur für den Fall unterscheiden, für Dateisysteme, die eine solche Benennung unterstützen. Verwenden Sie diese Option vorsichtig, da mit diesem Flag erstellte Dateien möglicherweise nicht für Anwendungen zugänglich sind, die für MS-DOS oder 16-Bit-Windows geschrieben wurden.
FILE_FLAG_RANDOM_ACCESS
0x10000000
Gibt an, dass auf die Datei willkürlich zugegriffen wird. Das System kann dies als Hinweis zur Optimierung der Zwischenspeicherung von Dateien verwenden.
FILE_FLAG_SEQUENTIAL_SCAN
0x08000000
Gibt an, dass auf die Datei sequenziell vom Anfang bis zum Ende zugegriffen wird. Das System kann dies als Hinweis zur Optimierung der Zwischenspeicherung von Dateien verwenden. Wenn eine Anwendung den Dateizeiger für den zufälligen Zugriff verschiebt, erfolgt möglicherweise keine optimale Zwischenspeicherung. Die ordnungsgemäße Ausführung ist jedoch weiterhin gewährleistet.

Das Angeben dieses Flags kann die Leistung für Anwendungen erhöhen, die große Dateien mithilfe des sequenziellen Zugriffs lesen. Noch deutlicher kann die Leistung bei Anwendungen sein, die große Dateien meist sequenziell lesen, aber gelegentlich kleine Bytebereiche überspringen.

FILE_FLAG_WRITE_THROUGH
0x80000000
Weist das System an, durch jeden Zwischencache zu schreiben und direkt auf den Datenträger zu wechseln. Das System kann Schreibvorgänge weiterhin zwischenspeichern, aber nicht verzögert leeren.
 

Wenn das Handle die Clientseite einer Named Pipe darstellt, kann der dwFlags-Parameter auch Informationen zur Sicherheitsqualität des Diensts enthalten. Weitere Informationen finden Sie unter Identitätswechsel. Wenn die aufrufende Anwendung das flag SECURITY_SQOS_PRESENT angibt, kann der dwFlags-Parameter einen oder mehrere der folgenden Werte enthalten.

Wert Bedeutung
SECURITY_ANONYMOUS
Annehmen der Identität des Clients auf der Ebene anonymer Identitätswechsel.
SECURITY_CONTEXT_TRACKING
Der Sicherheitsnachverfolgungsmodus ist dynamisch. Wenn dieses Flag nicht angegeben ist, ist der Sicherheitsnachverfolgungsmodus statisch.
SECURITY_DELEGATION
Identitätswechsel des Clients auf Der Ebene des Delegierungswechsels.
SECURITY_EFFECTIVE_ONLY
Dem Server stehen nur die aktivierten Aspekte des Clientsicherheitskontexts zur Verfügung. Wenn Sie dieses Flag nicht angeben, sind alle Aspekte des Clientsicherheitskontexts verfügbar.

Dadurch kann der Client die Gruppen und Berechtigungen einschränken, die ein Server beim Annehmen der Identität des Clients verwenden kann.

SECURITY_IDENTIFICATION
Identitätswechsel des Clients auf der Identitätswechselebene
SECURITY_IMPERSONATION
Identitätswechsel des Clients auf der Identitätswechselebene.

Rückgabewert

Wenn die Funktion erfolgreich ist, ist der Rückgabewert ein geöffnetes Handle für die angegebene Datei.

Wenn die Funktion fehlschlägt, ist der Rückgabewert INVALID_HANDLE_VALUE. Um erweiterte Fehlerinformationen zu erhalten, rufen Sie GetLastError auf.

Hinweise

Der dwFlags-Parameter kann keines der Dateiattributeflags (FILE_ATTRIBUTE_*) enthalten. Diese können nur angegeben werden, wenn die Datei erstellt wird.

Unter Windows 8 und Windows Server 2012 wird diese Funktion von den folgenden Technologien unterstützt.

Technologie Unterstützt
SMB 3.0-Protokoll (Server Message Block) Ja
SMB 3.0 Transparent Failover (TFO) Ja
SMB 3.0 mit Dateifreigaben mit horizontaler Skalierung (SO) Ja
Dateisystem mit freigegebenen Clustervolumes (CsvFS) Ja
Robustes Dateisystem (Resilient File System, ReFS) Ja

Anforderungen

   
Unterstützte Mindestversion (Client) Windows Vista [nur Desktop-Apps]
Unterstützte Mindestversion (Server) Windows Server 2003 [nur Desktop-Apps]
Zielplattform Windows
Kopfzeile winbase.h (Windows.h einschließen)
Bibliothek Kernel32.lib
DLL Kernel32.dll

Siehe auch

CreateFile

Dateiverwaltungsfunktionen