Partager via


Héritage

Un processus enfant peut hériter de plusieurs propriétés et ressources de son processus parent. Vous pouvez également empêcher un processus enfant d’hériter des propriétés de son processus parent. Les éléments suivants peuvent être hérités :

  • Descripteurs ouverts retournés par la fonction CreateFile . Cela inclut les handles vers les fichiers, les mémoires tampons d’entrée de console, les mémoires tampons d’écran de console, les canaux nommés, les périphériques de communication en série et les mailslots.
  • Descripteurs ouverts pour traiter, thread, mutex, événement, sémaphore, canal nommé, canal anonyme et objets de mappage de fichiers. Elles sont retournées par les fonctions CreateProcess, CreateThread, CreateMutex, CreateEvent, CreateSemaphore, CreateNamedPipe, CreatePipe et CreateFileMapping , respectivement.
  • Variables d'environnement.
  • Le répertoire actif.
  • La console, sauf si le processus est détaché ou qu’une console est créée. Un processus de console enfant peut également hériter des handles standard du parent, ainsi que l’accès à la mémoire tampon d’entrée et à la mémoire tampon d’écran active.
  • Mode d’erreur, tel que défini par la fonction SetErrorMode .
  • Masque d’affinité processeur.
  • Association avec un travail.

Le processus enfant n’hérite pas des éléments suivants :

Hériter des handles

Un processus enfant peut hériter de certains des handles de son parent, mais pas d’autres. Pour que le handle soit hérité, vous devez effectuer deux opérations :

  • Spécifiez que le handle doit être hérité lorsque vous créez, ouvrez ou dupliquez le handle. Les fonctions de création utilisent généralement le membre bInheritHandle d’une structure SECURITY_ATTRIBUTES à cet effet. DuplicateHandle utilise le paramètre bInheritHandles .
  • Spécifiez que les handles pouvant être hérités doivent être hérités en définissant le paramètre bInheritHandles sur TRUE lors de l’appel de la fonction CreateProcess . En outre, pour hériter des handles d’entrée, de sortie standard et d’erreur standard, le membre dwFlags de la structure STARTUPINFO doit inclure STARTF_USESTDHANDLES.

Pour spécifier la liste des handles qui doivent être hérités par un processus enfant spécifique, appelez la fonction UpdateProcThreadAttribute avec l’indicateur PROC_THREAD_ATTRIBUTE_HANDLE_LIST .

Un handle hérité fait référence au même objet dans le processus enfant que dans le processus parent. Il a également la même valeur et les mêmes privilèges d’accès. Par conséquent, lorsqu’un processus modifie l’état de l’objet, la modification affecte les deux processus. Pour utiliser un handle, le processus enfant doit récupérer la valeur de handle et « connaître » l’objet auquel il fait référence. En règle générale, le processus parent communique ces informations au processus enfant par le biais de sa ligne de commande, de son bloc d’environnement ou d’une forme quelconque de communication interprocessus.

Utilisez la fonction SetHandleInformation pour contrôler si un handle existant peut être hérité ou non.

Héritage des variables d’environnement

Un processus enfant hérite des variables d’environnement de son processus parent par défaut. Toutefois, CreateProcess permet au processus parent de spécifier un autre bloc de variables d’environnement. Pour plus d’informations, consultez Variables d’environnement.

Héritage du répertoire actif

La fonction GetCurrentDirectory récupère le répertoire actif du processus appelant. Un processus enfant hérite par défaut du répertoire actuel de son processus parent. Toutefois, CreateProcess permet au processus parent de spécifier un répertoire actif différent pour le processus enfant. Pour modifier le répertoire actuel du processus appelant, utilisez la fonction SetCurrentDirectory .