| Предыдущий | Следующий |
| ERROR_OPLOCK_NOT_GRANTED | ERROR_DISK_TOO_FRAGMENTED |
ERROR_INVALID_OPLOCK_PROTOCOL
Запрос oplock или подтверждение разрыва использовали недопустимый переход состояния
Обработка oplock является автоматом состояний. После уведомления о разрыве владелец может быть обязан подтвердить его и иногда запросить новый уровень. Эта ошибка означает, что подтверждение, флаги, запрошенный уровень замены или порядок запросов не соответствовали oplock, связанному с дескриптором. Поэтому она отличается от простого отказа из-за другого открывшего файл клиента.
Проверьте точный REQUEST_OPLOCK_INPUT_BUFFER и сведения завершения ожидающего вызова DeviceIoControl. Не используйте повторно буфер, чьи StructureVersion, StructureLength, флаги или запрошенный уровень относятся к другому запросу. Убедитесь также, что подтверждение выполняет только компонент-владелец oplock и дескриптор не был закрыт, неожиданно дублирован или заменён до отправки подтверждения.
Что проверить
- Записывайте каждый запрос, уведомление о разрыве и подтверждение в последовательности.
- Сравнивайте запрошенные и подтверждённые уровни с возвращённым NewOplockLevel.
- Не повторяйте идентичное повреждённое подтверждение без сброса состояния.
Ссылки
- Microsoft: операции opportunistic lock
- Microsoft: типы oplock и поведение при разрыве
- Microsoft: FSCTL_REQUEST_OPLOCK
Нужно найти другой код? Найти другой код состояния или ошибки.