Share via


FSCTL_REQUEST_OPLOCK IOCTL (winioctl.h)

Fordert eine opportunistische Sperre (Oplock) für eine Datei an und bestätigt, dass ein Oplock-Umbruch aufgetreten ist.

Rufen Sie zum Ausführen dieses Vorgangs die DeviceIoControl-Funktion mit den folgenden Parametern auf.

BOOL DeviceIoControl(
  (HANDLE) hDevice,                 // handle to file
  FSCTL_REQUEST_OPLOCK,             // dwIoControlCode
  (LPVOID) lpInBuffer,              // input buffer
  (DWORD) nInBufferSize,            // size of input buffer
  (LPVOID) lpOutBuffer,             // output buffer
  (DWORD) nOutBufferSize,           // size of output buffer
  (LPDWORD) lpBytesReturned,        // number of bytes returned
  (LPOVERLAPPED) lpOverlapped       // OVERLAPPED structure
);

Hinweise

Dieser Vorgang wird nur von Clientanwendungen verwendet, die eine opportunistische Sperre (Oplock) von einem lokalen Server anfordern. Clientanwendungen, die opportunistische Sperren von Remoteservern anfordern, dürfen diese nicht direkt anfordern. Der Netzwerkumleitungsor fordert transparent opportunistische Sperren für die Anwendung an. Ein Versuch, mit diesem Vorgang opportunistische Sperren von Remoteservern anzufordern, führt dazu, dass die Anforderung abgelehnt wird.

Der FSCTL_REQUEST_OPLOCK-Steuerelementcode bietet effizientere Funktionen als die folgenden zugehörigen Steuercodes: FSCTL_REQUEST_OPLOCK_LEVEL_1, FSCTL_REQUEST_OPLOCK_LEVEL_2, FSCTL_REQUEST_FILTER_OPLOCK und FSCTL_REQUEST_BATCH_OPLOCK. Das Anfordern verschiedener Oplock-Ebenen kann wiederholt auf demselben Handle ausgeführt werden, ohne den Handle zu schließen und erneut zu öffnen, wenn FSCTL_REQUEST_OPLOCK verwendet wird. Die anderen Steuerelementcodes erfordern, dass das Handle geschlossen und dann mit CreateFile erneut geöffnet wird, um eine solche Änderung vorzunehmen. Dies wird erreicht, indem das RequestedOplockLevel-Element der REQUEST_OPLOCK_INPUT_BUFFER-Struktur beim erneuten Ausgeben des FSCTL_REQUEST_OPLOCK-Steuerelementcodes bearbeitet wird.

In der folgenden Tabelle wird zusammengefasst, wie die Zwischenspeicherungsfähigkeit von oplock-Typen, die von FSCTL_REQUEST_OPLOCK verfügbar sind, den Oplocks der Ebene 2, Ebene 1 und Batch-Oplocks entsprechen.

Alternativer Steuerelementcode Äquivalenter Wert von RequestedOplockLevel-Flags Oplock-Typ
FSCTL_REQUEST_BATCH_OPLOCK OPLOCK_LEVEL_CACHE_READ \| OPLOCK_LEVEL_CACHE_WRITE \| OPLOCK_LEVEL_CACHE_HANDLE RWH
FSCTL_REQUEST_OPLOCK_LEVEL_1 OPLOCK_LEVEL_CACHE_READ \| OPLOCK_LEVEL_CACHE_WRITE RW
FSCTL_REQUEST_OPLOCK_LEVEL_2 OPLOCK_LEVEL_CACHE_READ R

Verwenden des FSCTL_REQUEST_OPLOCK-Steuerelementcode mit dem RequestedOplockLevel-Membersatz, um einen Oplock vom Typ RH zu OPLOCK_LEVEL_CACHE_READ | OPLOCK_LEVEL_CACHE_HANDLE gewähren. Ein RH-Oplock ähnelt dem Filter oplock, der vom FSCTL_REQUEST_FILTER_OPLOCK-Steuerelementcode gewährt wird. Beachten Sie jedoch, dass der Filter oplock nur einem Client erlaubt, einen Oplock für eine Datei gleichzeitig zu speichern. FSCTL_REQUEST_OPLOCK ermöglicht es mehreren Clients gleichzeitig, die RH-Sperre für eine Datei zu erhalten. Ein weiterer Unterschied besteht darin, dass FSCTL_REQUEST_FILTER_OPLOCK eine Oplock-Unterbrechungsbestätigung erfordert, bevor Schreibvorgänge auftreten können, wobei FSCTL_REQUEST_OPLOCK nicht, weil die Oplock-Unterbrechungsbenachrichtigung nur empfehlungsfrei ist und Schreibvorgänge ohne Bestätigung ausgeführt werden dürfen. Weitere Informationen finden Sie unter Breaking Oplocks.

Ein FSCTL_REQUEST_OPLOCK-Steuerelementcode schlägt fehl, wenn die Datei im nicht überlappenden (synchronen) Modus geöffnet wird.

Die Auswirkungen von überlappenden E/A-Vorgängen auf diesen Vorgang finden Sie im Abschnitt Hinweise des Themas DeviceIoControl .

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) Ja
Robustes Dateisystem (Resilient File System, ReFS) Ja

Außerdem kann ab Windows 8 und Windows Server 2012 der FSCTL_REQUEST_OPLOCK-Steuerelementcode verwendet werden, um einen Oplock für ein Verzeichnis und eine Datei anzufordern. Eine oplock-Anforderung für ein Verzeichnis kann entweder OPLOCK_LEVEL_CACHE_READ oder OPLOCK_LEVEL_CACHE_READ | OPLOCK_LEVEL_CACHE_HANDLE im RequestedOplockLevel-Member angeben.

Ein R- oder RH-Oplock für ein Verzeichnis wird auf Keine umgelöst, wenn sich der Inhalt einer Enumeration des Verzeichnisses ändert. Das Hinzufügen/Löschen einer Datei im Verzeichnis, das Ändern der Größe einer Datei im Verzeichnis, das Ändern des Zeitstempels einer Datei im Verzeichnis usw. würde beispielsweise den Oplock im Verzeichnis unterbrechen. Dieser Oplock-Umbruch erfordert keine Bestätigung, bevor die Änderungen im Verzeichnis auftreten können. es ist nur beratend.

Ein RH-Oplock für ein Verzeichnis unterbricht in R, wenn das Verzeichnis selbst umbenannt oder gelöscht wird. Dieser Oplock-Umbruch erfordert eine Bestätigung, bevor die Änderung am Verzeichnis erfolgen kann.

Anforderungen

   
Unterstützte Mindestversion (Client) Windows 7 [nur Desktop-Apps]
Unterstützte Mindestversion (Server) Windows Server 2008 R2 [nur Desktop-Apps]
Kopfzeile winioctl.h (einschließlich Windows.h)

Weitere Informationen