FSCTL_REQUEST_OPLOCK_LEVEL_2 - NtDoc

Native API online documentation, based on the System Informer (formerly Process Hacker) phnt headers
// winioctl.h

// CTL_CODE(0x0009, 0x001, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define FSCTL_REQUEST_OPLOCK_LEVEL_2 0x00090004
View the official Win32 API reference
// ntifs.h

// CTL_CODE(0x0009, 0x001, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define FSCTL_REQUEST_OPLOCK_LEVEL_2 0x00090004
View the official Windows hardware development documentation

NtDoc

No description available.

Win32 API reference (ni-winioctl-fsctl_request_oplock_level_2)

FSCTL_REQUEST_OPLOCK_LEVEL_2 IOCTL

Description

Requests a level 2 opportunistic lock on a file.

To perform this operation, call the DeviceIoControl function using the following parameters.

BOOL DeviceIoControl(
  (HANDLE) hDevice,                 // handle to file
  FSCTL_REQUEST_OPLOCK_LEVEL_2,     // dwIoControlCode
  NULL,                             // lpInBuffer
  0,                                // nInBufferSize
  NULL,                             // lpOutBuffer
  0,                                // nOutBufferSize
  (LPDWORD) lpBytesReturned,        // number of bytes returned
  (LPOVERLAPPED) lpOverlapped       // OVERLAPPED structure
);

Parameters

Input buffer

Input buffer length

Output buffer

Output buffer length

Input/output buffer

Input/output buffer length

Status block

Irp->IoStatus.Status is set to STATUS_SUCCESS if the request is successful.

Otherwise, Status to the appropriate error condition as a NTSTATUS code.

For more information, see NTSTATUS Values.

Remarks

This operation is used only by client applications requesting an opportunistic lock from a local server. Client applications requesting opportunistic locks from remote servers must not request them directly—the network redirector transparently requests opportunistic locks for the application. An attempt to use this operation to request opportunistic locks from remote servers will result in the request being denied.

If a new oplock type is desired, the handle must be closed and a new handle reopened using CreateFile, and DeviceIoControl must be called on the new handle with the desired FSCTL_REQUEST_OPLOCK__XXX_ control code. To request an oplock on a handle that can have the oplock type changed in place (the handle does not have to be closed and reopened), use the FSCTL_REQUEST_OPLOCK control code.

Use FSCTL_REQUEST_OPLOCK_LEVEL_2 to request a level 2 opportunistic lock on a file. A client file system can cache read data (but not write data) locally as long as the level 2 lock is held.

The file system requires no acknowledgment from the application that requested the level 2 opportunistic lock when the lock is broken. After the lock is broken, the network redirector is notified not to regard as valid any cached data from the file. For more information, see Breaking Oplocks.

For more information, see Types of Opportunistic Locks.

For a comparison of the various oplock control codes, see FSCTL_REQUEST_OPLOCK.

An FSCTL_REQUEST_OPLOCK_LEVEL_2 control code fails if the file is opened in nonoverlapped (synchronous) mode.

For the implications of overlapped I/O on this operation, see the Remarks section of the DeviceIoControl topic.

In Windows 8 and Windows Server 2012, this code is supported by the following technologies.

Technology Supported
Server Message Block (SMB) 3.0 protocol No
SMB 3.0 Transparent Failover (TFO) No
SMB 3.0 with Scale-out File Shares (SO) No
Cluster Shared Volume File System (CsvFS) Yes
Resilient File System (ReFS) Yes

See also


Windows hardware development documentation (fsctl-request-oplock-level-2)

FSCTL_REQUEST_OPLOCK_LEVEL_2 control code

The FSCTL_REQUEST_OPLOCK_LEVEL_2 control code requests a level 2 opportunistic lock (oplock) on a file.

To process this control code, a minifilter calls FltOplockFsctrl with the following parameters. A file system or legacy filter driver calls FsRtlOplockFsctrl.

For more information about opportunistic locking and about the FSCTL_REQUEST_OPLOCK_LEVEL_2 control code, see the Microsoft Windows SDK documentation.

Parameters

Status block

FltOplockFsctrl returns FLT_PREOP_PENDING for this operation if the oplock was granted. Otherwise, it returns FLT_PREOP_COMPLETE.

FsRtlOplockFsctrl returns one of the following NTSTATUS values for this operation:

Code Meaning
STATUS_PENDING The oplock was granted. This is a success code.
STATUS_CANCELLED The IRP was canceled before the FSCTL_REQUEST_OPLOCK_LEVEL_2 operation was completed. This is an error code.
STATUS_OPLOCK_NOT_GRANTED The oplock could not be granted. This is an error code.

Requirements

Requirement type Requirement
Header Ntifs.h (include Ntifs.h or Fltkernel.h)

See also

FLT_CALLBACK_DATA

FLT_PARAMETERS

FLT_PARAMETERS for IRP_MJ_FILE_SYSTEM_CONTROL

FltOplockFsctrl

FSCTL_OPBATCH_ACK_CLOSE_PENDING

FSCTL_OPLOCK_BREAK_ACK_NO_2

FSCTL_OPLOCK_BREAK_ACKNOWLEDGE

FSCTL_OPLOCK_BREAK_NOTIFY

FSCTL_REQUEST_BATCH_OPLOCK

FSCTL_REQUEST_FILTER_OPLOCK

FSCTL_REQUEST_OPLOCK_LEVEL_1

FsRtlOplockFsctrl

IRP_MJ_FILE_SYSTEM_CONTROL