| Предыдущий | Следующий |
| STG_S_POWER_CYCLE_REQUIRED | OLE_S_STATIC |
OLE_S_USEREG
OLE просит использовать сведения из реестра
OLE_S_USEREG — это HRESULT 262144 (0x00040000) из winerror.h. AllStat описывает OLE_S_USEREG как «Используйте базу реестра для получения запрошенных сведений». Старший бит severity сброшен, поэтому это успешный результат, но он сообщает больше, чем обычный S_OK.
OLE-операция завершилась успешно, указав вызывающему коду использовать зарегистрированные сведения о классе вместо данных от экземпляра объекта.
Где встречается этот результат
OLE_S_USEREGможет появляться в helper-функциях создания или активации OLE object; фиксируйте интерфейс и метод, вернувшие результат, а не делайте вывод только по символическому имени.OLE_S_USEREGможет появляться при поиске class metadata и verbs; фиксируйте интерфейс и метод, вернувшие результат, а не делайте вывод только по символическому имени.OLE_S_USEREGможет появляться в legacy embedding-коде, который способен получать сведения как от object handler, так и из registration database; фиксируйте интерфейс и метод, вернувшие результат, а не делайте вывод только по символическому имени.
Для OLE_S_USEREG, одно и то же числовое успешное значение может быть обработано неверно, если обёртка оставляет только Boolean. Для OLE_S_USEREGсохраняйте исходный HRESULT до оценки выходных данных и перехода состояния, относящихся к конкретному коду.
Последовательность диагностики
- Для
OLE_S_USEREG, зафиксируйте исходный HRESULT0x00040000сразу после возврата из метода и запишите, использовал ли вызывающий кодSUCCEEDED,FAILED, проверку на точное равенство или преобразование в исключение. - Определите точного владельца
OLE_S_USEREG: интерфейс, метод, экземпляр объекта, версию поставщика или фильтра, поток или apartment и фазу операции. - Проверьте решающую границу контракта для
OLE_S_USEREG: регистрация класса присутствует, правильно выбрана для bitness процесса и контекста user/machine и соответствует реально активируемому классу объекта. - Для
OLE_S_USEREG, проверьте каждый выходной параметр, счётчик, массив статусов, возвращённый интерфейс и побочный эффект, который документация метода связывает с этим результатом «успех с дополнительной информацией». - Сравните наблюдаемое состояние до и после
OLE_S_USEREG; не предполагайте, что признак успешной severity означает завершение каждой необязательной подоперации. - Для
OLE_S_USEREG, воспроизведите минимальный запрос с тем же состоянием объекта, а перед повтором измените только условие, подтверждённое собранными данными.
Граница состояния, которую нужно подтвердить
Главный вопрос для OLE_S_USEREG — присутствует ли регистрация класса, правильно ли выбрана для bitness процесса и контекста user/machine и соответствует ли реально активируемому классу. Для OLE_S_USEREGсам HRESULT не подтверждает завершение несвязанной работы и не гарантирует качество необязательных выходных данных.
Надёжная интерпретация OLE_S_USEREG точно указывает контракт метода, поколение объекта и выходные данные, которые остаются действительными. Для OLE_S_USEREG, это не позволяет ошибочно считать результат «успех с дополнительной информацией» ни полным успехом, ни обычной ошибкой.
Правильная обработка, повтор и восстановление
Следуйте документированному пути поиска в реестре и проверяйте регистрацию класса. Не заменяйте этот статус общей ошибкой и не выдумывайте возможности объекта, отсутствующие в регистрации.
Повторяйте OLE_S_USEREG только когда зафиксированное состояние действительно может изменить документированный результат. Для OLE_S_USEREG, повтор того же вызова неуместен для устойчивого признака конца, отмены, неподдерживаемого формата, скорректированного свойства или частичного результата, уже выполненные побочные эффекты которого ещё не согласованы.
Какие доказательства и телеметрию сохранить
- Для
OLE_S_USEREG, сохраните CLSID и ProgID. - Для
OLE_S_USEREG, сохраните выбранное 32- или 64-битное представление реестра. - Для
OLE_S_USEREG, сохраните владельца регистрации и версию установки. - Для
OLE_S_USEREG, сохраните запрошенные OLE-метаданные, например verbs или presentation. - Для
OLE_S_USEREG, сохраните fallback-путь, выбранный после HRESULT.
Также зафиксируйте ole_s_usereg_operation, ole_s_usereg_object, ole_s_usereg_state_before, ole_s_usereg_state_after, время UTC, идентификаторы процесса и потока, а также correlation ID. Для OLE_S_USEREG, не записывайте секреты в журналы, но сохраните GUID, CLSID, подтипы media, идентификаторы свойств, идентификаторы строк и хеши, необходимые для различения объектов.
Отличие от соседних значений HRESULT
OLE_S_STATIC описывает статический presentation object, а OLE_S_USEREG указывает вызывающему коду, где получить метаданные.
Для OLE_S_USEREG, это различие определяет, должен ли вызывающий код принять частичные результаты, завершить перечисление, подождать, изменить конфигурацию, уведомить пользователя либо вообще не выполнять восстановление после ошибки.
Рекомендации разработчикам и администраторам
Обработка кода OLE_S_USEREG должна проверять точное документированное значение до общей ветки SUCCEEDED(hr) , если от него зависят выходные данные или управление. Операционное исправление для OLE_S_USEREG должно затрагивать компонент-владелец COM, media, Tablet PC или OLE DB, а не сбрасывать несвязанные службы.
Отчёт в поддержку для OLE_S_USEREG должен включать десятичное значение 262144, шестнадцатеричное 0x00040000, описание AllStat, API-владельца и первый детальный статус или выходной параметр, объясняющий, почему метод не вернул обычный S_OK.
Практический сценарий проверки
OLE-контейнер запрашивает у object handler сведения о классе и получает этот HRESULT. Он читает зарегистрированные verbs для CLSID, записывает использованное представление реестра и не запускает сервер только ради запроса метаданных.
Негативный тест должен сохранять условие, приводящее к OLE_S_USEREG; тест восстановления должен менять только это условие и проверять как конечное состояние, так и HRESULT.
Ссылки
- Microsoft: коды ошибок COM для OLE — официальная документация, относящаяся к
OLE_S_USEREG. - Microsoft: регистрация COM — официальная документация, относящаяся к
OLE_S_USEREG. - Microsoft: значения HRESULT — официальная документация, относящаяся к
OLE_S_USEREG.
Нужно найти другой код? Найти другой код состояния или ошибки.