Поделиться через


Фильтрация операций реестра в кустах приложений

Приложения в пользовательском режиме используют кусты приложений в реестре для хранения данных о состоянии конкретного приложения.

Драйвер фильтра реестра получает вызовы к своей подпрограмме RegistryCallback для операций с реестром в кустах приложений. Эти вызовы не различают операции реестра с кустами приложений и операции с другими типами кустов реестра.

Чтобы загрузить куст приложения, приложение вызывает RegLoadAppKey.

Кусты приложений загружаются \\REGISTRY\\A в , а не в \\REGISTRY\\MACHINE или \\REGISTRY\\USER.

Обратите внимание, что нет способа пройти .\\REGISTRY\\A Попытка открыть раздел в разделе \REGISTRY\A завершается сбоем с состоянием ошибки STATUS_ACCESS_DENIED.

Для доступа к ключу в кусте приложения приложение использует дескриптор, который оно получает при вызове RegLoadAppKey.

Операционная система автоматически выгружает куст приложения после закрытия всех дескрипторов куста.

В отличие от других типов кустов реестра, для которых каждый раздел защищен с помощью собственного дескриптора безопасности, безопасность куста приложения зависит от дескриптора безопасности файла hive. Это означает следующее.

  • Попытка задать дескриптор безопасности для отдельного ключа в кусте приложения завершается сбоем с состоянием ошибки STATUS_ACCESS_DENIED.
  • Сущность, которая успешно загружает куст, может изменить весь куст.

Драйверы фильтра реестра, обрабатывающие операции создания ключей и открытых ключей (которые указываются значениями уведомлений RegNtPreOpenKey, RegNtPreOpenKeyEx, RegNtPreCreateKey и RegNtPreCreateKeyEx ), не должны использовать абсолютный путь (начиная с \\REGISTRY\\A\\) для открытия куста приложения. Это может сделать только диспетчер реестра. Если драйвер фильтра реестра пытается открыть куст приложения таким образом (например, путем вызова подпрограммы ZwOpenKey ), операция завершается сбоем с состоянием ошибки STATUS_ACCESS_DENIED.

Строка имени абсолютного пути отображается в элементе CompleteNameструктуры REG_CREATE_KEY_INFORMATION, REG_CREATE_KEY_INFORMATION_V1, REG_OPEN_KEY_INFORMATION или REG_OPEN_KEY_INFORMATION_V1 .