Проверка состояния oplock операции IRP_MJ_CREATE
Следующее применяется только при открытии существующего потока файла (т. е. для вновь созданных потоков не может быть уже существующих блокировок).
Примечание При обработке IRP_MJ_CREATE для любой операции блокировки, если требуемый доступ не содержит ничего, кроме FILE_READ_ATTRIBUTES, FILE_WRITE_ATTRIBUTES или SYNCHRONIZE, операция не прерывается, если не указан FILE_RESERVE_OPFILTER. Указание FILE_RESERVE_OPFILTER всегда приводит к разрыву блокировки, если создание завершается успешно. Для краткости и простоты в следующей таблице описано выше, так как оно применяется ко всем блокировкам.
Тип запроса | Условия |
---|---|
уровне 1 |
Не работает на IRP_MJ_CREATE, когда:
|
Если блокировка не работает:
|
|
Уровень 2 |
Не работает на IRP_MJ_CREATE, когда:
|
Если блокировка не работает:
|
|
Пакетная служба |
Не работает на IRP_MJ_CREATE, когда:
|
Если блокировка не работает:
|
|
Фильтр |
Не работает на IRP_MJ_CREATE, когда:
|
Если блокировка не работает:
|
|
Read |
Не работает на IRP_MJ_CREATE, когда:
|
Если блокировка не работает:
|
|
Read-Handle |
Не работает на IRP_MJ_CREATE, когда:
|
Если блокировка не работает:
|
|
Read-Write |
Не работает на IRP_MJ_CREATE, когда:
|
Если блокировка не работает:
|
|
Дескриптор чтения и записи |
Не работает на IRP_MJ_CREATE, когда:
|
Если блокировка не работает:
|
При обработке операции IRP_MJ_CREATE файловая система выполняет дополнительные проверки на наличие блокировок пакетной службы и фильтрации (а не самого пакета oplock), что влияет на то, запрашивает ли файловая система пакет oplock обработку прерывания операции. Это случай, когда операции в одном потоке данных могут влиять на блокировку других потоков данных одного и того же файла (т. е. на последние два элемента списка из следующего списка условий). Если выполняется одно или несколько из следующих условий, файловая система отправляет запрос пакету oplock для выполнения обработки прерывания операции:
Запросите разрыв, если это открытый сетевой запрос и присутствует транзакция KTM . В противном случае не запрашивайте прерывание при открытии сетевого запроса.
Если операция SUPERSEDE, OVERWRITE или OVERWRITE_IF выполняется в альтернативном потоке данных, а FILE_SHARE_DELETE не указан и в основном потоке данных имеется блокировка пакетной службы или фильтра, запросите прерывание блокировки пакетной службы или фильтра в основном потоке данных.
Если операция SUPERSEDE, OVERWRITE или OVERWRITE_IF выполняется в основном потоке данных и запрошен доступ к DELETE, а в любом альтернативном потоке данных есть блокировки пакетной службы или фильтра, запросите прерывание блокировки пакетной службы или фильтра для всех альтернативных потоков данных, в которых они есть.
Когда файловая система решает попросить пакет oplock выполнить обработку прерывания операции, применяются правила, изложенные в предыдущей таблице.
Перед выполнением проверок доступа к общей папке проверка прерывания блокировок пакетной службы и фильтрации. Это означает, что блокировка пакетной службы или фильтра не работает, даже если открытый запрос в конечном итоге завершается сбоем из-за нарушения общего доступа.