Извините, это невозможно, по крайней мере, в той степени, в которой вы этого не хотите. Как упомянуто в комментариях ʜcᴇι7007, все управление доступом Windows основано на пользователях. К каждому процессу прикреплен токен, который определяет, каким пользователем он запущен. Нет разницы между тем, как вы выполняете действие, и программой, выполняемой под вашей учетной записью, которая выполняет это действие, поскольку вы делаете буквально все через тот или иной процесс. «Программы не атакуют пользователей; пользователи атакуют пользователей».
Кроме того, практически каждый процесс обращается к реестру. Даже если сама программа явно не осуществляет доступ к Реестру, исследование Process Monitor показывает, что каждое приложение с графическим интерфейсом начинается с загрузки считываний Реестра, чтобы выяснить, как настроить графические элементы управления. Запустите Process Monitor для приложения, которое, по вашему мнению, не нуждается в реестре; вы будете удивлены
Но если вы хотите заблокировать все записи и только записи, на самом деле есть кое-что, что может помочь. В Windows есть понятие «уровни целостности», которое является частью UAC. По сути, программа, работающая с определенным уровнем целостности, не может писать в объекты, помеченные с более высоким уровнем целостности. Обычные процессы и обычные файлы (и ключи реестра) имеют средний уровень целостности, но вы можете вручную запускать процессы с низким уровнем. Загрузите инструмент PsExec . Если вы хотите создать командную строку, которая не может писать в обычные места, запустите это:
psexec -l -i cmd
-l
Переключатель устанавливает низкие целостности; -i
переключатель делает процесс интерактивным. Полученная командная строка может записывать только в места, специально помеченные как Низкая целостность.
C:\Users\Ben>reg add HKCU\Test ERROR: Access is denied.
Эта команда работает в обычной командной строке, но не в закрытой.