IRP_MJ_LOCK_CONTROL (controladores de filtro y FS)

Cuándo se envió

El Administrador de E/S, otros componentes del sistema operativo y otros controladores en modo kernel envían solicitudes IRP_MJ_LOCK_CONTROL.

Operación: controladores del sistema de archivos

El controlador del sistema de archivos debe extraer y descodificar el objeto de archivo para determinar si el objeto de dispositivo de destino es el objeto de dispositivo de control del sistema de archivos. Si es así, el controlador del sistema de archivos debe completar el IRP según corresponda sin procesar la solicitud de bloqueo.

De lo contrario, si la solicitud se ha emitido en un identificador que representa un archivo de usuario abierto, el controlador del sistema de archivos debe realizar la operación indicada por el código de función secundaria y completar el IRP. Si no es así, el controlador debe producir un error en el IRP.

Estos son los códigos de función secundaria válidos:

Código Descripción
IRP_MN_LOCK Indica una solicitud de bloqueo de intervalo de bytes, posiblemente en nombre de una aplicación en modo de usuario que haya llamado a la función LockFile de Win32.
IRP_MN_UNLOCK_ALL Indica una solicitud para liberar todos los bloqueos de intervalo de bytes de un archivo, normalmente porque se cierra el último identificador pendiente para un objeto de archivo.
IRP_MN_UNLOCK_ALL_BY_KEY Indica una solicitud para liberar todos los bloqueos de intervalo de bytes con un valor de clave especificado.
IRP_MN_UNLOCK_SINGLE Indica una solicitud para liberar un único bloqueo de intervalo de bytes, posiblemente en nombre de una aplicación en modo de usuario que haya llamado a la función UnlockFile de Win32.

Operación: controladores de filtro del sistema de archivos heredados

Los controladores de filtro del sistema de archivos deben pasar el IRP al siguiente controlador inferior de la pila después de realizar cualquier procesamiento necesario.

Parámetros

Un controlador de filtro o sistema de archivos llama a IoGetCurrentIrpStackLocation con el IRP especificado para obtener un puntero a su propia ubicación de pila en irP, que se muestra en la lista siguiente como IrpSp. (IrP se muestra como Irp). El controlador puede usar la información que se establece en los siguientes miembros del IRP y la ubicación de pila de IRP en el procesamiento de una solicitud de control de bloqueo:

  • DeviceObject es un puntero al objeto de dispositivo de destino.

  • Irp->IoStatus apunta a una estructura de IO_STATUS_BLOCK que recibe el estado de finalización final e información sobre la operación solicitada.

  • IrpSp->FileObject apunta al objeto de archivo asociado a DeviceObject.

    El parámetro IrpSp-FileObject> contiene un puntero al campo RelatedFileObject, que también es una estructura FILE_OBJECT. El campo RelatedFileObject de la estructura FILE_OBJECT no es válido durante el procesamiento de IRP_MJ_LOCK_CONTROL y no se debe usar.

  • IrpSp->Las marcas pueden ser uno o varios de los valores siguientes:

Marca Significado
SL_EXCLUSIVE_LOCK Si se establece esta marca, se solicita un bloqueo de intervalo de bytes exclusivo. De lo contrario, se solicita un bloqueo compartido.
SL_FAIL_IMMEDIATELY Si se establece esta marca, se producirá un error en la solicitud de bloqueo si no se puede conceder inmediatamente.
  • IrpSp->MajorFunction se establece en IRP_MJ_LOCK_CONTROL.

  • IrpSp->MinorFunction se establece en uno de los siguientes valores:

    • IRP_MN_LOCK
    • IRP_MN_UNLOCK_ALL
    • IRP_MN_UNLOCK_ALL_BY_KEY
    • IRP_MN_UNLOCK_SINGLE
  • IrpSp->Parameters.LockControl.ByteOffset es el desplazamiento de bytes inicial dentro del archivo del intervalo de bytes que se va a bloquear o desbloquear.

  • IrpSp->Parameters.LockControl.Key es la clave para el bloqueo de intervalo de bytes.

  • IrpSp->Parameters.LockControl.Length es la longitud, en bytes, del intervalo de bytes que se va a bloquear o desbloquear.

Consulte también

FltProcessFileLock

FsRtlProcessFileLock

IO_STACK_LOCATION

IO_STATUS_BLOCK

IoGetCurrentIrpStackLocation

IRP