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 — это длина (в байтах) диапазона байтов, который необходимо заблокировать или разблокировать.
См. также раздел
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по