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

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

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

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

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

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

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

Чтобы получить доступ к ключу в hive приложения, приложение использует дескриптор, который он получает при вызове 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.