// winioctl.h
// CTL_CODE(0x0009, 0x000, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define FSCTL_REQUEST_OPLOCK_LEVEL_1 0x00090000
View the official Win32 API reference// ntifs.h
// CTL_CODE(0x0009, 0x000, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define FSCTL_REQUEST_OPLOCK_LEVEL_1 0x00090000
View the official Windows hardware development documentationNo description available.
Requests a level 1 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_1, // dwIoControlCode
NULL, // lpInBuffer
0, // nInBufferSize
NULL, // lpOutBuffer
0, // nOutBufferSize
(LPDWORD) lpBytesReturned, // number of bytes returned
(LPOVERLAPPED) lpOverlapped // OVERLAPPED structure
);
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.
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_1 to request a level 1 opportunistic lock on a file. A client file system can cache both read data or write data locally as long as the level 1 lock is held.
The level 1 oplock owner must acknowledge an oplock break (see Breaking opportunistic locks) before any operation that is incompatible with a level 1 oplock can go through on another handle. 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 Types of Opportunistic Locks.
For a comparison of the various oplock control codes, see FSCTL_REQUEST_OPLOCK.
An FSCTL_REQUEST_OPLOCK_LEVEL_1 control code fails if the file is opened in non-overlapped (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 |
The FSCTL_REQUEST_OPLOCK_LEVEL_1 control code requests a level 1 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_1 control code, see the Microsoft Windows SDK documentation.
Oplock: Opaque oplock object pointer for the file.
CallbackData: FltOplockFsctrl only. Callback data (FLT_CALLBACK_DATA) structure for an IRP_MJ_FILE_SYSTEM_CONTROL FSCTL request. The FsControlCode parameter for the operation must be FSCTL_REQUEST_OPLOCK_LEVEL_1.
Irp: FsRtlOplockFsctrl only. IRP for an IRP_MJ_FILE_SYSTEM_CONTROL FSCTL request. The FsControlCode parameter for the operation must be FSCTL_REQUEST_OPLOCK_LEVEL_1.
OpenCount: Number of user handles for the file.
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_1 operation was completed. This is an error code. |
| STATUS_OPLOCK_NOT_GRANTED | The oplock could not be granted. This is an error code. |
| Requirement type | Requirement |
|---|---|
| Header | Ntifs.h (include Ntifs.h or Fltkernel.h) |
FLT_PARAMETERS for IRP_MJ_FILE_SYSTEM_CONTROL
FSCTL_OPBATCH_ACK_CLOSE_PENDING
FSCTL_OPLOCK_BREAK_ACKNOWLEDGE