FSCTL_LOCK_VOLUME IOCTL (winioctl.h)

Sperrt ein Volume, wenn es nicht verwendet wird. Auf ein gesperrtes Volume kann nur über Handles für das Dateiobjekt (*hDevice) zugegriffen werden, das das Volume sperrt. Weitere Informationen finden Sie im Abschnitt mit Hinweisen.

Um diesen Vorgang auszuführen, rufen Sie die Funktion DeviceIoControl mit den folgenden Parametern auf.

BOOL DeviceIoControl(
  (HANDLE) hVolume,            // handle to a volume
  (DWORD) FSCTL_LOCK_VOLUME,   // dwIoControlCode
  NULL,                        // lpInBuffer
  0,                           // nInBufferSize
  NULL,                        // lpOutBuffer
  0,                           // nOutBufferSize
  (LPDWORD) lpBytesReturned,   // number of bytes returned
  NULL                         // OVERLAPPED structure
);

Irp-IoStatus.Status> wird auf STATUS_SUCCESS festgelegt, wenn die Anforderung erfolgreich ist.

Andernfalls wird Status zur entsprechenden Fehlerbedingung als NTSTATUS-Code verwendet.

Weitere Informationen finden Sie unter NTSTATUS-Werte.

Hinweise

Das an DeviceIoControlübergebene hDevice-Handle muss ein Handle für ein Volume sein, das für den direkten Zugriff geöffnet wird. Um dieses Handle abzurufen, rufen Sie CreateFile auf, wobei der parameter lpFileName auf eine Zeichenfolge der folgenden Form festgelegt ist:

\.\X:

Dabei ist X ein Festplattenpartitionsbuchstabe, ein Diskettenlaufwerk oder ein CD-ROM-Laufwerk. Die Anwendung muss auch die FILE_SHARE_READ und FILE_SHARE_WRITE Flags im dwShareMode-Parameter von CreateFile angeben.

Wenn das angegebene Volume ein Systemvolume ist oder eine Auslagerungsdatei enthält, schlägt der Vorgang fehl.

Wenn auf dem Volume geöffnete Dateien vorhanden sind, schlägt dieser Vorgang fehl. Umgekehrt deutet der Erfolg dieses Vorgangs darauf hin, dass keine geöffneten Dateien vorhanden sind.

Dieser Vorgang ist nützlich für Anwendungen, die für einen bestimmten Zeitraum exklusiven Zugriff auf ein Volume benötigen, z. B. das Datenträgerhilfsprogramm und Sicherungsprogramme.

Ein gesperrtes Volume bleibt gesperrt, bis eines der folgenden Auftritte auftritt:

  • Die Anwendung verwendet den FSCTL_UNLOCK_VOLUME Steuercode, um das Volume zu entsperren.
  • Das Handle wird entweder direkt über CloseHandle oder indirekt geschlossen, wenn ein Prozess beendet wird.
Das System löscht alle zwischengespeicherten Daten auf dem Volume, bevor es gesperrt wird. Beispielsweise werden alle Daten, die in einem Cache für verzögerte Schreibvorgänge gespeichert sind, auf das Volume geschrieben.

Das NTFS-Dateisystem behandelt ein gesperrtes Volume als nicht eingebundenes Volume. Der FSCTL_DISMOUNT_VOLUME-Steuerungscode funktioniert ähnlich, sucht jedoch nicht nach geöffneten Dateien, bevor die Bereitstellung aufgehoben wird. Beachten Sie, dass ohne einen erfolgreichen Sperrvorgang ein nicht bereitgestelltes Volume jederzeit von jedem Prozess erneut bereitgestellt werden kann. Dies wäre z. B. kein idealer Zustand für die Durchführung einer Volumesicherung.

In Windows 8 und Windows Server 2012 wird dieser Code von den folgenden Technologien unterstützt.

Technologie Unterstützt
SMB 3.0-Protokoll (Server Message Block) No
SMB 3.0 Transparent Failover (TFO) No
SMB 3.0 mit Dateifreigaben mit horizontaler Skalierung (SO) No
Dateisystem mit freigegebenen Clustervolumes (CsvFS) Siehe Kommentar
 

Auf dem CsvFs-Sperrvolume wird die PNP-Benachrichtigung nur auf dem Knoten gesendet, auf dem die Sperranforderung ausgestellt wurde. Eine Sperre ist nur erfolgreich, wenn der CsvFs-Filter über NTFS keine geöffneten Dateien sieht.

Nachdem Sie eine Sperre für ein CSV-Volume erhalten haben, müssen Sie den Ziehpunkt zum Sperren dieses Volumes schließen, bevor Sie ein Handle für das Volume öffnen. Das Entsperren des Volumes mit FSCTL_UNLOCK_VOLUME reicht nicht aus.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows XP [nur Desktop-Apps]
Unterstützte Mindestversion (Server) Windows Server 2003 [nur Desktop-Apps]
Kopfzeile winioctl.h (windows.h einschließen)

Weitere Informationen

CloseHandle

CreateFile

DeviceIoControl

FSCTL_DISMOUNT_VOLUME

FSCTL_UNLOCK_VOLUME

Volumeverwaltungs-Steuerungscodes