Вы можете назначить процесс на объект задания. Используйте SetInformationJobObject с флагом JOB_OBJECT_LIMIT_ACTIVE_PROCESS, чтобы ограничить число процессов в этом объекте задания одним. НЕ устанавливайте JOB_OBJECT_LIMIT_BREAKAWAY_OK (что позволило бы процессу создавать процессы, которые не были частью объекта задания).
Процесс может все еще работать вокруг этого, например, путем запуска нового процесса через планировщик задач или WMI. Если вы пытаетесь создать что-то вроде песочницы для запуска кода, которому вы действительно не доверяете, этого будет недостаточно. Если у вас есть программа, которой вы доверяете, но просто хотите наложить несколько ограничений на то, что она делает, этого должно быть более чем достаточно.
Проще говоря, это равносильно блокировке вашего автомобиля. Кто-то может взломать (или, в данном случае, выйти), но, по крайней мере, он должен сделать немного больше, чем просто войти без помех.