Поделиться через


IRP_MJ_LOCK_CONTROL (драйверы FS и фильтров)

При отправке

Диспетчер ввода-вывода, другие компоненты операционной системы и другие драйверы режима ядра отправляют запросы IRP_MJ_LOCK_CONTROL.

Операция: драйверы файловой системы

Драйвер файловой системы должен извлечь и декодировать файловый объект, чтобы определить, является ли целевой объект устройства объектом управляющего устройства файловой системы. Если это так, драйвер файловой системы должен завершить IRP соответствующим образом без обработки запроса на блокировку.

В противном случае, если запрос был выдан на дескриптор, представляющий открытый пользовательский файл, драйвер файловой системы должен выполнить операцию, указанную дополнительным кодом функции, и завершить IRP. В противном случае драйвер должен завершиться ошибкой IRP.

Ниже приведены допустимые коды дополнительных функций:

Код Описание
IRP_MN_LOCK Указывает запрос на блокировку диапазона байтов, возможно, от имени приложения пользовательского режима, которое вызывало функцию Win32 LockFile .
IRP_MN_UNLOCK_ALL Указывает запрос на освобождение всех блокировок диапазона байтов для файла, как правило, из-за закрытия последнего неосуществленного дескриптора для объекта файла.
IRP_MN_UNLOCK_ALL_BY_KEY Указывает запрос на освобождение всех блокировок диапазона байтов с указанным значением ключа.
IRP_MN_UNLOCK_SINGLE Указывает запрос на освобождение одной блокировки диапазона байтов, возможно, от имени приложения пользовательского режима, которое вызывало функцию Win32 UnlockFile .

Операция: устаревшие драйверы фильтров файловой системы

Драйверы фильтров файловой системы должны передавать IRP в следующий драйвер в стеке после выполнения любой необходимой обработки.

Параметры

Файловая система или драйвер фильтра вызывает IoGetCurrentIrpStackLocation с заданным IRP, чтобы получить указатель на собственное расположение стека в IRP, как показано в следующем списке как IrpSp. (IRP отображается как Irp.) Драйвер может использовать сведения, заданные в следующих элементах IRP и расположении стека IRP при обработке запроса на управление блокировкой:

  • DeviceObject — это указатель на целевой объект устройства.

  • Irp->IoStatus указывает на структуру IO_STATUS_BLOCK , которая получает окончательное состояние завершения и сведения о запрошенной операции.

  • IrpSp->FileObject указывает на объект файла, связанный с DeviceObject.

    Параметр IrpSp-FileObject> содержит указатель на поле RelatedFileObject, которое также является FILE_OBJECT структурой. Поле RelatedFileObject структуры FILE_OBJECT недопустимо во время обработки IRP_MJ_LOCK_CONTROL и не должно использоваться.

  • IrpSp->Флаги могут быть одним или несколькими из следующих значений:

Flag Значение
SL_EXCLUSIVE_LOCK Если этот флаг установлен, запрашивается монопольная блокировка диапазона байтов. В противном случае запрашивается общая блокировка.
SL_FAIL_IMMEDIATELY Если этот флаг установлен, запрос на блокировку завершится ошибкой, если он не может быть предоставлен немедленно.
  • IrpSp->MajorFunction имеет значение IRP_MJ_LOCK_CONTROL.

  • IrpSp->Параметр MinorFunction имеет одно из следующих значений:

    • IRP_MN_LOCK
    • IRP_MN_UNLOCK_ALL
    • IRP_MN_UNLOCK_ALL_BY_KEY
    • IRP_MN_UNLOCK_SINGLE
  • IrpSp->Parameters.LockControl.ByteOffset — это начальная смещение байтов в файле диапазона байтов, который необходимо заблокировать или разблокировать.

  • IrpSp->Parameters.LockControl.Key — это ключ для блокировки диапазона байтов.

  • IrpSp->Parameters.LockControl.Length — это длина (в байтах) диапазона байтов, который необходимо заблокировать или разблокировать.

См. также раздел

FltProcessFileLock

FsRtlProcessFileLock

IO_STACK_LOCATION

IO_STATUS_BLOCK

IoGetCurrentIrpStackLocation

IRP