Condividi tramite


Eredità

Un processo figlio può ereditare diverse proprietà e risorse dal processo padre. È anche possibile impedire a un processo figlio di ereditare le proprietà dal processo padre. È possibile ereditare quanto segue:

  • Handle aperti restituiti dalla funzioneCreateFile. Sono inclusi handle per file, buffer di input della console, buffer dello schermo della console, named pipe, dispositivi di comunicazione seriali e mailslot.
  • Handle aperti per elaborare, thread, mutex, evento, semaforo, named pipe, anonymous-pipe e oggetti di mapping di file. Questi vengono restituiti dalle CreateProcess, CreateThread, CreateMutex, CreateEvent, CreateSemaphore, CreateNamedPipe, CreatePipee funzioni CreateFileMapping, rispettivamente.
  • Variabili di ambiente.
  • Directory corrente.
  • La console, a meno che il processo non sia scollegato o venga creata una nuova console. Un processo della console figlio può anche ereditare gli handle standard dell'elemento padre, nonché l'accesso al buffer di input e al buffer dello schermo attivo.
  • Modalità di errore, impostata dalla funzioneSetErrorMode.
  • Maschera di affinità del processore.
  • Associazione con un processo.

Il processo figlio non eredita quanto segue:

Ereditarietà di handle

Un processo figlio può ereditare alcuni handle del padre, ma non ereditare altri. Per fare in modo che un handle venga ereditato, è necessario eseguire due operazioni:

  • Specificare che l'handle deve essere ereditato quando si crea, si apre o duplica l'handle. Le funzioni di creazione usano in genere il bInheritHandle membro di una struttura SECURITY_ATTRIBUTES a questo scopo. DuplicateHandle usa il parametro bInheritHandles.
  • Specificare che gli handle ereditabili devono essere ereditati impostando il parametro bInheritHandles su TRUE quando si chiama la funzioneCreateProcess. Inoltre, per ereditare l'input standard, l'output standard e gli handle di errore standard, il dwFlags membro della struttura STARTUPINFO deve includere STARTF_USESTDHANDLES.

Per specificare un elenco degli handle che devono essere ereditati da un processo figlio specifico, chiamare la funzioneUpdateProcThreadAttributecon il flag PROC_THREAD_ATTRIBUTE_HANDLE_LIST.

Un handle ereditato fa riferimento allo stesso oggetto nel processo figlio come avviee nel processo padre. Ha anche lo stesso valore e gli stessi privilegi di accesso. Pertanto, quando un processo modifica lo stato dell'oggetto, la modifica influisce su entrambi i processi. Per usare un handle, il processo figlio deve recuperare il valore dell'handle e "conoscere" l'oggetto a cui fa riferimento. In genere, il processo padre comunica queste informazioni al processo figlio tramite la riga di comando, il blocco di ambiente o una forma di comunicazione interprocesso.

Usa la funzioneSetHandleInformationper controllare se un handle esistente è ereditabile o meno.

Ereditarietà delle variabili di ambiente

Per impostazione predefinita, un processo figlio eredita le variabili di ambiente del processo padre. Tuttavia, CreateProcess consente al processo padre di specificare un blocco diverso di variabili di ambiente. Per altre informazioni, vedere Variabili di ambiente.

Ereditarietà della directory corrente

La funzioneGetCurrentDirectoryrecupera la directory corrente del processo chiamante. Per impostazione predefinita, un processo figlio eredita la directory corrente del processo padre. Tuttavia, CreateProcess consente al processo padre di specificare una directory corrente diversa per il processo figlio. Per modificare la directory corrente del processo chiamante, usare la funzioneSetCurrentDirectory.