Фильтрация операций реестра в кустах приложений
Приложения в пользовательском режиме используют кусты приложений в реестре для хранения данных о состоянии конкретного приложения.
Драйвер фильтра реестра получает вызовы к своей подпрограмме 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 .