// winioctl.h
// CTL_CODE(0x0009, 0x002, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define FSCTL_REQUEST_BATCH_OPLOCK 0x00090008
View the official Win32 API reference// ntifs.h
// CTL_CODE(0x0009, 0x002, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define FSCTL_REQUEST_BATCH_OPLOCK 0x00090008
View the official Windows hardware development documentationNo description available.
Requests a batch opportunistic lock on a file.
To perform this operation, call the DeviceIoControl function using the following arguments.
BOOL b = DeviceIoControl(
(HANDLE) hDevice, // handle to file
FSCTL_REQUEST_BATCH_OPLOCK, // 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 (oplock) 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_BATCH_OPLOCK to request a batch opportunistic lock on a file. A client file system can cache read data, write data, and handle data locally as long as the level 1 lock is held.
The batch oplock owner must acknowledge an oplock break (see Breaking opportunistic locks) before any operation that is incompatible with a batch 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_BATCH_OPLOCK 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_BATCH_OPLOCK control code requests a batch 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_BATCH_OPLOCK 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_BATCH_OPLOCK.
Irp: FsRtlOplockFsctrl only. IRP for an IRP_MJ_FILE_SYSTEM_CONTROL FSCTL request. The FsControlCode parameter for the operation must be FSCTL_REQUEST_BATCH_OPLOCK.
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_BATCH_OPLOCK 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