Función FsRtlOplockFsctrl (ntifs.h)

FsRtlOplockFsctrl realiza varias operaciones de bloqueo oportunista (oplock) en nombre de un sistema de archivos o un controlador de filtro.

Sintaxis

NTSTATUS FsRtlOplockFsctrl(
  [in] POPLOCK Oplock,
  [in] PIRP    Irp,
  [in] ULONG   OpenCount
);

Parámetros

[in] Oplock

Puntero oplock oppac para el archivo. Este puntero debe haberse inicializado mediante una llamada anterior a FsRtlInitializeOplock.

[in] Irp

Puntero al IRP para la operación de E/S. Este parámetro es obligatorio y no puede ser NULL.

[in] OpenCount

Número de identificadores de usuario para el archivo, si se solicita un interbloqueo exclusivo. Establecer un valor distinto de cero para una solicitud de interbloqueo de nivel 2, R o RH indica que hay bloqueos de intervalo de bytes en el archivo. Para obtener información sobre los tipos de interbloqueo, consulte Información general sobre Oplock.

Valor devuelto

FsRtlOplockFsctrl devuelve uno de los siguientes valores NTSTATUS:

Código devuelto Descripción
STATUS_SUCCESS Para una solicitud de IRP_MJ_CREATE, STATUS_SUCCESS indica que se concedió el interbloqueo de filtro solicitado. Para una operación FSCTL, el significado de STATUS_SUCCESS depende del código FSCTL. Para obtener más información, vea las páginas de referencia de los códigos FSCTL enumerados en la siguiente sección Comentarios.
STATUS_CANCELLED Se canceló la operación de E/S. STATUS_CANCELLED es un código de error.
STATUS_INVALID_PARAMETER El código FSCTL para la operación de E/S no era uno de los valores válidos enumerados en la sección Comentarios siguiente. STATUS_INVALID_PARAMETER es un código de error.
STATUS_OPLOCK_NOT_GRANTED No se pudo conceder el interbloqueo. STATUS_OPLOCK_NOT_GRANTED es un código de error.
STATUS_PENDING Solo se usa para las operaciones FSCTL. El significado de STATUS_PENDING depende del código FSCTL. Para obtener más información, vea las páginas de referencia de los códigos FSCTL enumerados en la siguiente sección Comentarios. STATUS_PENDING es un código correcto.
STATUS_CANNOT_BREAK_OPLOCK No se pudo conceder un nuevo interbloqueo. IRP es una solicitud de IRP_MJ_CREATE y FILE_OPEN_REQUIRING_OPLOCK se especificó en el parámetro create options para la operación. STATUS_CANNOT_BREAK_OPLOCK es un código correcto.

Observaciones

Los sistemas de archivos y los controladores de filtro heredados llaman a FsRtlOplockFsctrl para realizar varias operaciones de interbloqueo para una operación de E/S de control de sistema de archivos o creación. Los minifiltros deben llamar a FltOplockFsctrl en lugar de FsRtlOplockFsctrl.

El IRP al que apunta el parámetro Irp debe ser un IRP válido para una operación de IRP_MJ_FILE_SYSTEM_CONTROL o IRP_MJ_CREATE .

Si el IRP es una solicitud de IRP_MJ_FILE_SYSTEM_CONTROL, FsRtlOplockFsctrl se puede usar con uno de los siguientes códigos FSCTL, que se establece en IrpSp-Parameters.FileSystemControl.FsControlCode>:

Para obtener información detallada sobre estos FSCTL y sobre bloqueos oportunistas en general, consulte la documentación de Microsoft Windows SDK.

Si irP es una solicitud de IRP_MJ_CREATE , FsRtlOplockFsctrl se puede usar para solicitar un interbloqueo de filtro pendiente si se cumplen todas las condiciones siguientes:

  • El valor del parámetro OpenCount debe ser 1.
  • El valor del parámetro DesiredAccess para la solicitud IRP_MJ_CREATE debe ser FILE_READ_ATTRIBUTES.
  • El valor del parámetro ShareAccess para la solicitud de IRP_MJ_CREATE debe ser FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE.

Si se concede la solicitud de un interbloqueo de filtro pendiente, FsRtlOplockFsctrl devuelve STATUS_SUCCESS. Para obtener más información sobre la creación de parámetros, consulte la entrada de referencia para IRP_MJ_CREATE.

Los filtros y los sistemas de archivos que llaman a esta función deben sincronizar llamadas en el paquete de oplock proporcionado por el sistema. Consulte Sincronización de oplock para obtener más información.

Requisitos

   
Plataforma de destino Universal
Header ntifs.h (incluya Ntifs.h)
Library NtosKrnl.lib
Archivo DLL NtosKrnl.exe
IRQL <= APC_LEVEL

Vea también

FSCTL_OPBATCH_ACK_CLOSE_PENDING

FSCTL_OPLOCK_BREAK_ACKNOWLEDGE

FSCTL_OPLOCK_BREAK_ACK_NO_2

FSCTL_OPLOCK_BREAK_NOTIFY

FSCTL_REQUEST_BATCH_OPLOCK

FSCTL_REQUEST_FILTER_OPLOCK

FSCTL_REQUEST_OPLOCK_LEVEL_1

FSCTL_REQUEST_OPLOCK_LEVEL_2

FltOplockFsctrl

FsRtlCheckOplock

FsRtlCurrentBatchOplock

FsRtlInitializeOplock

FsRtlOplockIsFastIoPossible

FsRtlUninitializeOplock

IRP_MJ_CREATE

IRP_MJ_FILE_SYSTEM_CONTROL