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 opque 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 necesario y no se puede null.
[in] OpenCount
Número de identificadores de usuario para el archivo, si se solicita un interbloqueo exclusivo. Si se establece un valor distinto de cero para una solicitud de interbloqueo de nivel 2, R o RH, se indica que hay bloqueos de intervalo de bytes en el archivo. Para obtener información sobre los tipos de interbloqueo, vea Información general de 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 siguiente sección Comentarios. 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 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 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 fltOplockFsctrl en lugar de FsRtlOplockFsctrl.
El IRP al que apunta el parámetro irp de
Si 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:
- 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
- FSCTL_REQUEST_OPLOCK_LEVEL_2
Para obtener información detallada sobre estas FSCTL y sobre bloqueos oportunistas en general, consulte la documentación del SDK de Microsoft Windows.
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 de
ShareAccess para la solicitud 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 cómo crear parámetros, vea 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 de sincronización de Oplock para obtener más información.
Requisitos
Requisito | Valor |
---|---|
de la plataforma de destino de |
Universal |
encabezado de |
ntifs.h (incluya Ntifs.h) |
biblioteca de |
NtosKrnl.lib |
DLL de |
NtosKrnl.exe |
irQL | <= APC_LEVEL |
Consulte también
FSCTL_OPBATCH_ACK_CLOSE_PENDING