Я запускаю чистую установку (всего несколько дней назад) Windows 10 home 64 bit, и у меня возникают проблемы с доступом к определенному разделу реестра. Когда редактор Office VBA (32-разрядный процесс под моей собственной учетной записью ограниченного пользователя) сканирует реестр на наличие доступных элементов управления, он достигает CLSID {0002DF01-0000-0000-C000-000000000046}
в ветви HKCR\CLSIDs и получает отказ в доступе, когда открытие ключа в режиме чтения, что не позволяет продолжить. Этот ключ присутствует только в ветви HKLM, а не в ветви HKCU. Видя его значение по умолчанию, это для "Internet Explorer (версия 1.0)". Есть две копии для этого; один непосредственно в пути Classes\CLSID, другой в пути Classes\WOW6432Node\CLSID для 32-битных процессов. Так как это Office 32 bit, я сначала сосредоточился на версии WOW6432Node.
Мои тесты до сих пор:
- Этот ключ уже имел разрешение на чтение для моей учетной записи пользователя ... что дает?
- Владельцем был TrustedInstaller (почему он?), И разрешения для этого ключа были явно переопределены (то есть не унаследованы, как я подозреваю - почему?)
- Я сменил владельца на "Администраторы" и добавил свою учетную запись с полным разрешением. Вкладка "Эффективный доступ" в RegEdit подтверждает, что у этого пользователя есть полные права на него, но отказ в доступе все еще срабатывает, когда VBA IDE (работающая под этой же учетной записью пользователя) пытается его прочитать?
- Я временно переименовал ключ (например, заменив 1-е "0" на "1"). Согласно Process Monitor, VBA IDE теперь может нормально читать переименованный ключ - доступ больше не запрещен !? Переименование обратно возвращает старое поведение снова ...
- Думая, что это может быть конфликтом между 32- и 64-битной "версией" одного и того же ключа, я попытался сделать то же самое с 64-битной версией этого ключа. Результат: разрешения по умолчанию уже были достаточно хорошими, настройка владения для администраторов работает, предоставление администраторов полного контроля также работает, но тогда переименование ключа в RegEdit в качестве администратора не разрешено? RegEdit выдает «Ошибка переименования ключа - Редактор реестра не может переименовать {0002DF01-0000-0000-C000-000000000046}. Ошибка при переименовании ключа. "(Вау, это полезная информация!) Использование Process Monitor показывает, что операция RegRenameKey в RegEdit также приводит к отказу в доступе.
- Запустив RegEdit с системной учетной записью с помощью
PsExec -s -i regedit.exe
(учетная запись подтверждена с помощью диспетчера задач), он все еще не может переименовать ключ.
Похоже, что это, таким образом, не проблема разрешения как таковая; похоже, что какой-то другой процесс активно отслеживает доступ к этому ключу по имени и запрещает его? Независимо от того, какие права доступа установлены, администраторы не могут переименовать 64-разрядную версию ключа, и 32-разрядные процессы, пытающиеся прочитать 32-разрядную версию ключа, также получают «доступ запрещен». Я предполагаю, что, поскольку 32-битные процессы запрашивают общий путь Classes\CLSID ... (т.е. не явно указав путь WOW6432Node в нем, как это делали мои переименования RegEdit), это вызывает такую же запись здесь.
Чтобы завершить картину: я, честно говоря, не могу вспомнить, когда это начало происходить; Впервые я заметил это несколько недель назад, когда мне снова понадобилась эта функциональность VBA IDE. У меня установлен Sandboxie v5.18 вместе со стандартным Защитником Windows. Все программное обеспечение исправлено и обновлено. Кроме того, никакое другое инвазивное программное обеспечение безопасности не установлено. Отключение службы Sandboxie и Защитника Windows также не помогло, равно как и запуск Windows в безопасном режиме.
Кто-нибудь знает, что может происходить?
Исправление контекста для любого любопытного и / или нуждающегося в помощи исправления этой проблемы: я использую Office 2010 профессиональный 32-разрядный, и я столкнулся с ошибкой VBA IDE, которая приводит к невозможности добавить дополнительные элементы управления в ваш набор инструментов при разработке форм в IDE. Я могу выбрать "Дополнительные элементы управления" в течение всего дня (из меню, а также из всплывающего контекстного меню из самой панели инструментов), но, кроме краткого мигания формы изменения курсора, ничего не происходит - нет диалогового окна "Дополнительные элементы управления" открывается вообще, ошибок не отображается, ничего. Причина, по которой это происходит, заключается в том, что при итерациях по реестру в поисках идентификаторов CLSID типа "управление" среда IDE VBA просто завершает свою работу, когда сталкивается с ошибкой "отказано в доступе" при чтении раздела реестра. Используя Process Monitor, вы можете определить, какой ключ вызвал ошибку разрешения, а исправление установленных разрешений снова делает VBA счастливым. К сожалению, ошибка присутствует уже давно, и, хотя она встречается не так часто, IMO, это все еще плохой дизайн, который не был исправлен.