2010-01-24 8 views
1

Sur Linux, normalement j'utilise la fonction ptrace pour tracer tout syscall, et tuer le processus s'il essaie de faire quelque chose de dangereux pour ma machine, comme system("shutdown -s -t 00") ou plus.Comment surveiller et limiter automatiquement la ressource de processus sur Windows

Existe-t-il un moyen de faire cela sur Windows?

EDIT: Je veux écrire le programme Bac à sable pour limiter le temps et l'utilisation de la mémoire de son enfant qui peut fonctionner sur Windows et Linux, et il ne peut désormais fonctionner sur Linux via ptrace

+0

Cette question convient de demander au super-utilisateur. com ... –

+0

Non, il s'agit de programmation. La fonction ptrace call et system() est la fonction C. – innocenat

+0

Je ne suis pas au courant d'une telle chose pour Windows ... quand vous parlez de 'limiter le temps et l'utilisation de la mémoire de son enfant', cela ressemble à surveiller un processus fork'd en utilisant l'appel fork() ... – t0mm13b

Répondre

4

Si vous associez votre processus à un Job object, vous pouvez limiter le temps CPU et la mémoire du processus. Cela ne vous permettra pas d'empêcher si d'effectuer des actions malveillantes, mais il vous permettra de réaliser ce que vous avez demandé.

+0

Donc, en combinant l'utilisation de tâches et l'utilisation de privilèges (voir ma réponse), il pourrait effectivement limiter le temps CPU, l'utilisation de la mémoire et bloquer les actions dangereuses. –

+0

C'est ce que font Google Chrome et Microsoft Office dans leurs sandbox. Bien sûr, le défi consiste à tout faire fonctionner (indice: c'est beaucoup plus difficile que vous ne le pensez) :). –

+0

Je peux l'imaginer. :) BTW, que peut-on faire pour limiter aussi l'utilisation du système de fichiers? Pour autant que je sache, les ACL ici sont inutiles, puisqu'elles s'appliquent à l'utilisateur, ce qui serait le même même après avoir limité les privilèges. [OT] N'a pas remarqué avant que vous étiez réellement Larry Osterman; mes compliments pour votre blog, je le vérifie presque tous les jours! [/ OT] –

1

Pour exécuter une application dans un sandbox vous pouvez créer un nouveau jeton d'accès restreint avec CreateRestrictedToken (here est quelques informations sur les privilèges que vous pouvez activer/désactiver), appelez ImpersonateLoggedOnUser avec le nouveau jeton, démarrez le nouveau processus avec CreateProcess et revenez à votre ancien jeton avec RevertToSelf. Je ne suis pas sûr si dans tous les contextes vous pouvez utiliser directement CreateProcessAsUser, essayez-le.

+0

Pouvez-vous me donner un exemple? Je ne suis pas sûr de savoir comment l'utiliser. – innocenat

+0

Attendez, je relis votre question, et si vous voulez limiter l'utilisation de la mémoire et le temps CPU, les privilèges sont inutiles, ils doivent limiter les actions privilégiées (par exemple, éteindre l'ordinateur). –

0

Peut-être trop tard, je suis tombé sur votre message à la recherche de la même fonctionnalité moi-même.

J'ai trouvé limite CPU 1.1

Vous pouvez le télécharger ici avec le code source http://www.killprog.com/etce.html

Je l'utilise avec beaucoup de succès, espérons qu'il vous aidera