Контроль доступа в Windows осуществляется отдельно для каждого объекта. Если вы хотите защитить объект процесса, вам нужно установить ACL объекта процесса, либо при создании процесса (через lpProcessAttributes из CreateProcess), либо впоследствии (через SetKernelObjectSecurity ). Если вы добавляете запись «запретить все» в ACL, попытки злоумышленника открыть процесс не удаются.
Конечно, владелец процесса (и, следовательно, любой вредоносный код, выполняемый пользователем) может изменить ACL обратно на прежний - однако, вредоносный код может быть не готов к этому. Чтобы эффективно предотвратить атаки из пользовательского пространства, необходимо запустить процесс как неинтерактивный пользователь (например, как LocalSystem).
Никакая защита не может предотвратить атаки из пространства ядра, поэтому любой, кто может установить драйверы, может также взломать любой процесс в системе.