2009-10-03 103 views

回答

2

您可以分配過程到工作對象。將SetInformationJobObject與JOB_OBJECT_LIMIT_ACTIVE_PROCESS標誌一起使用可將該作業對象中的進程數限制爲1。不要設置JOB_OBJECT_LIMIT_BREAKAWAY_OK(這將允許進程創建不屬於作業對象的進程)。

進程可能仍然可以解決此問題,例如通過任務調度程序或WMI啓動新進程。如果你正在嘗試做一些事情,比如創建一個沙盒來運行你真正不信任的代碼,這是不夠的。如果你有一個你信任的程序,但只想對它的作用設置一些限制,這應該是綽綽有餘的。

要稍微不同,這相當於鎖定你的車。有人可以打破(或在這種情況下),但至少他們必須做的不僅僅是無阻礙地走路。

2

在Windows上,沒有辦法阻止產生其他進程的處理。在我知道的任何操作系統上也沒有。

系統調用CreateProcess()可用於所有進程,因此任何進程都可以創建子進程。

您可以在限制進程創建的沙箱中運行該進程,但其開銷可能比您想要的要多。

請問爲什麼你想做這樣的事情?

1

使用NT Job objects

JOBOBJECT_BASIC_LIMIT_INFORMATION可以限制活動進程的數量,或使用JOBOBJECT_ASSOCIATE_COMPLETION_PORT並殺死新的進程(如果你只需要殺掉所有新進程的一個子集)