Compartir a través de


Función FsRtlOplockFsctrlEx (ntifs.h)

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

Sintaxis

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

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.

[in] Flags

Máscara de bits para las operaciones de interbloqueo asociadas. Un sistema de archivos o un controlador de filtro establece bits para especificar el comportamiento de FsRtlOplockFsctrlEx. Este parámetro tiene las siguientes opciones:

Marca Significado
OPLOCK_FSCTRL_FLAG_ALL_KEYS_MATCH (0x00000001) El sistema de archivos comprobó que todas las claves de interbloqueo de cualquier identificador abierto coinciden actualmente. Al especificar esta marca, se permite que el paquete de oplock conceda un interbloqueo de nivel RW o RWH cuando exista más de un identificador abierto para el archivo. Para obtener más información sobre los tipos de oplock, vea Información general sobre Oplock.

Valor devuelto

FsRtlOplockFsctrlEx 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.

Comentarios

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

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 irP es una solicitud de IRP_MJ_FILE_SYSTEM_CONTROL, FsRtlOplockFsctrlEx se puede usar con uno de los siguientes códigos FSCTL, que se establece en IrpSp-Parameters.FileSystemControl.FsControlCode>:

Para obtener más información 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, se puede usar FsRtlOplockFsctrlEx 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, FsRtlOplockFsctrlEx 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 las llamadas al paquete de oplock proporcionado por el sistema. Consulte Sincronización de oplock para obtener más información.

Requisitos

Requisito Value
Cliente mínimo compatible La rutina FsRtlOplockFsctrlEx está disponible a partir de Windows 7.
Plataforma de destino Universal
Encabezado ntifs.h (incluya Ntifs.h)
Library NtosKrnl.lib
Archivo DLL NtosKrnl.exe
IRQL <= APC_LEVEL

Consulte 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

FSCTL_REQUEST_OPLOCK_LEVEL_1

FSCTL_REQUEST_OPLOCK_LEVEL_2

FltOplockFsctrl

FsRtlInitializeOplock

IRP_MJ_CREATE

IRP_MJ_FILE_SYSTEM_CONTROL