Как regedit может удалить ключ с правами "запретить всем"?
Сначала я должен предоставить некоторый контекст.
Я могу настроить запуск procmon на некоторой высоте, отличной от высоты по умолчанию, сделав два изменения в ключе 'HKLM\SYSTEM\CurrentControlSet\Services\PROCMON24\Instances\Process Monitor 24 Instance':
- Изменение значения высоты со стандартного значения 385200 на требуемое значение; например. '136500'
- И добавив специальное разрешение для ключа: пользователь: Все тип: Запретить разрешения:('установить значение' | 'удалить')
Причина изменения высоты очевидна. Причина добавления специального разрешения менее очевидна: без этого procmon просто сбросит высоту до значения по умолчанию.
Хорошо, вот мой вопрос:
Я не могу программно удалить добавленное разрешение или изменить этот ключ или его значения. Это неудивительно, потому что разрешение запрещает доступ "всем".
Однако я могу легко удалить это разрешение, используя regedit. Я просто выбираю разрешение и удаляю его.
Так какой трюк regedit использует, чтобы переопределить это разрешение?
Я вижу, что он работает как текущий пользователь, а не как "СИСТЕМА". Я могу использовать psexec для запуска сценария удаления как "SYSTEM", но это также запрещает доступ.
1 ответ
Оглядываясь назад, становится ясно, что regedit не использует какой-либо специальный трюк или привилегию для удаления ACE "запретить всем". Проблемный ACE не запрещает все операции с разделом реестра. Это только отрицание "удалить" и "установить значение". С этим ACE это место, даже regedit не может удалить или установить значения. То есть он не может открыть ключ с доступом "удалить" или "установить значение".
Что может сделать regedit - это открыть ключ с доступом write-dacl. Проблемный ТУЗ не отрицает этого.
Как только regedit (или любая другая программа) открывает ключ с доступом write-dacl, он может удалить проблемный ACE и затем внести любые другие необходимые изменения в ключ.
Doh!