Как дать процессу определенные привилегии в Windows - PullRequest
0 голосов
/ 11 июня 2010

Я пишу некоторое тестирующее программное обеспечение, которое получает некоторый исходный код, компилирует его на сервере, выполняет его, пересылает данные из базы данных, перехватывает выходные данные и сравнивает их с данными в базе данных, чтобы убедиться в их правильности.Проблема в том, что исходный код может быть любым (он написан на c / c ++ и скомпилирован с Visual Studio Cl), поэтому мне нужно как-то предотвратить злонамеренных пользователей.Я автоматически убиваю эти процессы, если они выполняются дольше, чем некоторое время, или используют больше памяти, чем позволено.

Вопрос в том, могу ли я разрешить только этим процессам только запись и чтение из стандартных входных / выходных потоков иЗапретить любые другие права доступа в Windows.

Прошу прощения за мой английский.

Заранее спасибо.

1 Ответ

1 голос
/ 11 июня 2010

Возможно Объекты заданий могут вам помочь (см. http://msdn.microsoft.com/en-us/library/ms684161(VS.85).aspx). Эта очень мощная функция не очень хорошо известна.

Работа с заданиями очень проста. Вы можете создать заданиев отношении CreateJobObject и установить множество различных ограничений, таких как время, память и некоторые ограничения. Затем можно создать процесс с флагом приостановки, назначить процесс заданию и возобновить процесс. Затем вы получите полный контроль над созданным процессоми все дерево дочерних процессов, которые процесс может создать. Функция задания существует с Windows 2000.

Другой современный способ - Изоляция привилегий пользовательского интерфейса (UIPI) (см. * 1013).* или способ использования Низкоинтегрированные процессы, представленные в Vista. См. http://msdn.microsoft.com/en-us/library/Bb250462#dse_stlip, как создать процесс с Низкоинтегрированностью.

...