Я тестировал откат к точке восстановления в Windows 10 20H1 Release Preview и внезапно напоролся на вынесенную в заголовок проблему. Сегодня я расскажу о ее диагностике и покажу решение.
Занятно, что неделей ранее мы ковыряли такую же ситуацию в чате инсайдеров, но к решению не пришли. Видимо, когда сам сталкиваешься с проблемой, какие-то косвенные признаки помогают или просто приходят в голову другие идеи :)
👉 Описанное в статье решение применимо к специфической ситуации и может не помочь в вашем случае, даже если все симптомы совпадают. При таком раскладе просто переустановите ОС поверх с сохранением настроек и программ.
[+] Сегодня в программе
Описание проблемы
Контроль учетных записей блокирует запуск оснасток MMC (диспетчер устройств, журнал событий, службы и т.д.) сообщением:
Это приложение заблокировано в целях защиты. Администратор заблокировал выполнение этого приложения. За дополнительными сведениями обратитесь к администратору.
This app has been blocked for your protection. An administrator has blocked you from running this app. For more information, contact the administrator.
Проблема наблюдается только при запуске оснасток из оболочки Windows — меню Пуск, ярлыков, Win + R. Из командной строки от имени администратора все работает, в чем и заключается обходной путь, например: mmc devmgmt.msc
.
Эта ошибка не связана с заблокированными файлами!
Аналогичное сообщение может появляться при запуске исполняемых файлов, загруженных из интернета. В этом случае проблема решается легко – надо разблокировать файл в его свойствах или из PowerShell. Об этом я рассказывал в рамках статьи об альтернативных потоках данных NTFS.
В сети много однотипных статей, советующих стандартный набор: разблокировку файла, отключение SmartScreen, добавление файла в исключения антивируса и т.д., но они все мимо.
Диагностика
Обратите внимание на строку Издатель: Нет данных в диалоге UAC. Система по какой-то причине не может проверить издателя приложения и блокирует запуск.
Отсутствие издателя
На самом деле в диалоге UAC это наблюдается не только у mmc.exe, но и у множества исполняемых файлов Windows. В этом можно убедиться, например, запустив командную строку от имени администратора. А можно в Process Explorer добавить столбец Verified Signer и увидеть страшную картину.
UAC блокирует почему-то только оснастки MMC. Впрочем, иначе было бы еще хуже ;)
Служба криптографии
За проверку издателя отвечает служба криптографии. В чате мы безуспешно тыкали вокруг нее пальцем в небо, а в своей ОС я обратил внимание, что служба грузит ЦП на 15-20%.
Монитор ресурсов показал постоянную запись 80-90кб/сек в $LogFile, но причины такого поведения оставались неясными.
Это навело меня на мысль сделать проверку диска, и она даже что-то исправила, но не насущную проблему. Для очистки совести я прогнал DISM и SFC, а также удалил последнее обновление, но эти способы ожидаемо не помогли.
Журнал событий
Вообще, с этого можно было начинать, но иногда я забываю даже про такие основы диагностики, как безопасный режим :)
В журнале приложений обнаружились тысячи свежих ошибок CAPI2 и десятки тысяч предупреждений ESENT! Модуль КриптоПРО тоже отметился в качестве пострадавшего.
В частности, регистрировались приведенные ниже ошибки.
Event 256 — CAPI2
Службе шифрования не удалось инициализировать базу данных каталога. Ошибка: -2147418113 (0x8000ffff) : Разрушительный сбой
The Cryptographic Services service failed to initialize the Catalog Database. The error was: -2147418113 (0 x8000 ffff) : Catastrophic failure
Event 642 — ESENT
Catalog Database (16656, D,50) Catalog Database: Не удается использовать версию функции формата базы данных 9180 (0 x23 dc), так как в качестве текущего используется формат базы данных 1568.20.0, и он определяется параметром 0 x410022 D8 (8920 | JET_ efvAllowHigherPersistedFormat).
Catalog Database (16656,D,50) Catalog Database: The database format feature version 9180 (0x23dc) could not be used due to the current database format 1568.20.0, controlled by the parameter 0x410022D8 (8920 | JET_efvAllowHigherPersistedFormat).
Catalog Database
Стало намного теплее! Catalog Database – это файл базы данных криптографических хэшей. В папке System32 есть две подпапки – catroot и catroot2. В первой данные о пакетах драйверов, а во второй – о системных файлах.
Я попробовал остановить службу криптографии и починить системную базу данных каталогов с помощью входящей в ОС утилиты esentutl:
esentutl /p %windir%\system32\catroot2\{F750E6C3-38EE-11D1-85E5-00C04FC295EE}\catdb
Это не помогло, но оставалось еще кардинальное средство.
Решение
Решение заключается в пересоздании системной базы данных каталогов. В PowerShell от имени администратора:
Stop-Service cryptsvc Rename-Item -Path "C:\Windows\System32\catroot2" -NewName catroot2.old Restart-Computer -Force
Первая команда останавливает службу криптографии, вторая переименовывает папку catroot2, а третья перезагружает систему (в моем случае перезапуска службы оказалось недостаточно).
После перезагрузки папка catroot2 создалась заново, и все наладилось! Любопытно, что у товарища в чате система сама исправила проблему спустя четыре дня после появления.
Однако мне не удалось выяснить, что именно проделала ОС для самовосстановления. Равно как осталось загадкой, что вызвало сбой на вполне свежей установке Release Preview.
Заключение
Даже неопытный пользователь легко решит такую проблему переустановкой ОС поверх без всякой диагностики. Однако это проблематично на инсайдерских сборках, в т.ч. на этапе Release Preview, потому что нет дистрибутива!
Для быстрого и медленного колец ISO выпускаются не слишком часто, а в случае с Release Preview нужно ждать общей доступности грядущей версии. Поскольку легкого пути решения проблем нет, приходится обращаться за поддержкой или разбираться самостоятельно.
Олег
Утром столкнулся с такой проблемой на ltsc. (нельзя запустить редактор групповых политик и открыть диспетчер устройств — сообщение как на скриншоте, до этого все работало) Исправил в реестре параметр EnableLUA на 0. Проблема исчезла… Хоть это и не правильно.
Vadim Sterkin
Очевидно, что отключение UAC избавляет от блокировки. Но это не решение и даже далеко не лучший обходной путь. Но теперь вы можете проверить мой вариант решения.
Yaromax
За отключение UAC в современных системах — пожизненный эцих с гвоздями (© Кин-Дза-Дза).
Олег
Постараюсь завтра проверить. Логично, что отключение UAC, — это не решение, а временная мера.
Олег
«Фараону помогло». Спасибо за совет! Проблема действительно была в этом.
Vadim Sterkin
Спасибо за отчет!
Mark Smirnov
скорее всего, что в обновлении, которое вы откатили были изменения в структуре этой базы. а функции изменения структуры базы допиливаются (конвертации типов, добавление столбцов и др масштабные изменения) вручную и обычно их пилят только в сторону повышения. эти функции автоматически срабатывают при обновлении, когда запускается служба и видит базу с версией меньше, чем она поддерживает.
а в вашем случае служба увидела базу с версией выше, чем она поддерживает и отказывается работать, потому что просто не знает как с ней работать.
тут дело даже не в конкретной службе, это могло произойти где угодно. и если служба критичная то ос перестает загружаться
Алексей Аркадьев
Версия насчёт обновления похожа на правду — проблемы начались после него (хотя «после» не значит «вследствие»).
Но непонятно, почему без отката обновления всё само починилось спустя некоторое время.
Vadim Sterkin
Трудно сказать, была ли причина в обновлении. Это было KB4558244 (в базе знаний этих статей нет, ибо превью). Это добавка к предварительному же накопительному обновлению KB4550936.
Вчера был второй вторник, соответственно обновление полетело в массы. И если причина в нем и она не исправлена и применима к 1909 и ниже, то мы увидим много проблем… У меня однако финальная версия накопительного обновления для RP проблему не создала.
Ваша теория понятна, но она не вполне объясняет, почему все починилось после пересоздания каталога, равно как без отката обновления.
Vadim Sterkin
Почитал описание KB4550936 внимательнее — да, обновляли Microsoft JET Database Engine. Видимо с этим и связано.
Mark Smirnov
Ну да, только дело не в обновлении, а в откате обновления. Проблема же началась после отката обновления?
Vadim Sterkin
См. ниже
Mark Smirnov
Эта теория все объясняет:
— после обновления у вас все нормально, так как база успешно обновилась (обработчики обновления сработали верно)
— проблема появилась вследствие отката обновления, то есть отката версии компонента (обработчиков отката обычно не пишут)
— пересоздание каталога помогло тем, что эта база создалась заново автоматически, через старую версию компонента и при обновлении она опять обновится до новой. то есть эта «проблема» вполне воспроизводима, если после обновления второй раз вы захотите откатиться.
это просто достаточно частный случай, в данный момент со службой проверки сертификатов, а вообще это могло произойти с любым другим компонентом, в котором не пишут обработчиков отката
Vadim Sterkin
Мы не откатывали обновления до появления проблемы. Я после возникновения проблемы откатил только KB4558244, но не KB4550936, которое предположительно первым внесло изменения в движок Jet.
Да, у меня проблема возникла после отката на точку восстановления. Но она была майской, а оба обновления — апрельскими.
Алексей вообще не делал откат ни того, ни другого.
Алексей
Установил уже кучу 10-ток, оригинальных, в том числе и LTSC, всегда сразу отключаю UAC и обновления, и таких проблем не наблюдаю, неужели Вам эти обновления так важны?
Vadim Sterkin
Мне обновления крайне важны, я не хожу с голой задницей по улице и в интернете. Равно как я хочу знать и контролировать, какие приложения у меня работают с правами администратора.
В моем блоге огромное количество материалов на эту тему, в том числе:
• 10 мифов Windows 10 LTSC, которые никогда не умрут
• В чем риск работы в устаревшей операционной системе
• Так ли страшен контроль учетных записей (UAC)?
Под каждой из них есть ссылки на связанные статьи. Приятного чтения!
Mark Smirnov
Эта проблема возникает не вследствие обновления, а вследствие отката обновления, когда новая версия компонента уже успел обновить версию базы, а старая не умеет работать с новой версией.
Алексей Аркадьев
Да, но у меня не было отката обновления!
artem
да в общем-то и без «mmc» можно.
zagadkaster
После обновления с 1909 на 2004 (чистый образ msdn) появилась эта проблема.
К сожалению пересоздание системной базы данных каталогов не помогло!
Каталог переименовывается в catroot2.old, после перезагрузки создаётся новый catroot2 и проблема остаётся!
Vadim Sterkin
Вопрос обсуждается здесь http://forum.oszone.net/thread-342986.html
Возможно, вы и подняли эту тему.
Neff
Точно такая же проблема, решения пока видимо нету.
Vadim Sterkin
Пишите в тему все подробности об ОС и своих действиях.
Angelin Dobrodnov
Все то же самое. Приведенное решение не помогло.
Есть еще идеи?
Vadim Sterkin
http://forum.oszone.net/post-2922249.html#post2922249
Angelin Dobrodnov
Не помогло. Все так же.
Vadim Sterkin
Переустановите поверх (последняя ссылка в статье), версия 20H1 уже доступна
Angelin Dobrodnov
Сделал. Все исправилось.
Но так и не понял, что это было.
Да и зачем нужна диагностика, когда все решает переустановка.
Vadim Sterkin
В статье написано же