| Предыдущий | Следующий |
| ERROR_OPLOCK_SWITCHED_TO_NEW_HANDLE | ERROR_CANNOT_BREAK_OPLOCK |
ERROR_CANNOT_GRANT_REQUESTED_OPLOCK
Запрошенный уровень кэширования недоступен, но возможен более слабый oplock
Современные oplock Windows отдельно выражают намерения кэшировать чтение, запись и дескриптор. Запрос может быть слишком сильным для текущего состояния open/share, хотя менее разрешающая комбинация остаётся совместимой. Поэтому предупреждение информативнее общего отказа: точный уровень не предоставлен, но выходной буфер может описывать допустимый уровень.
Читайте REQUEST_OPLOCK_OUTPUT_BUFFER, а не считайте все ненулевые результаты одинаковыми. Диспетчер кэша может принять более слабый уровень, отправить новый запрос, отражающий реальные потребности, или продолжить без кэширования. Не оставляйте write-behind или кэширование дескриптора включёнными только потому, что часть запроса удовлетворена. Также учитывайте различия каталогов и файлов: oplock каталогов поддерживают более узкий набор уровней.
Что проверить
- Проверьте NewOplockLevel и возвращённые флаги.
- Сопоставьте каждый предоставленный бит с фактически разрешённым поведением кэша.
- Корректно откатывайтесь, если кэширование записи или дескриптора недоступно.
Ссылки
- Microsoft: операции с оппортунистическими блокировками
- Microsoft: типы oplock и разрывы
- Microsoft: FSCTL_REQUEST_OPLOCK
Нужно найти другой код? Найти другой код состояния или ошибки.
