Partilhar via


Herança

Um processo filho pode herdar várias propriedades e recursos de seu processo pai. Você também pode impedir que um processo filho herde propriedades de seu processo pai. O seguinte pode ser herdado:

  • Identificadores abertos retornados pela funçãoCreateFile. Isso inclui identificadores para arquivos, buffers de entrada do console, buffers de tela do console, pipes nomeados, dispositivos de comunicação serial e mailslots.
  • Abra identificadores para processar objetos de processo, thread, mutex, evento, semáforo, pipe nomeado, pipe anônimo e mapeamento de arquivos. Eles são retornados pelo CreateProcess, CreateThread, CreateMutex, CreateEvent, CreateSemaphore, CreateNamedPipe, CreatePipee CreateFileMapping funções, respectivamente.
  • Variáveis de ambiente.
  • O diretório atual.
  • O console, a menos que o processo seja desanexado ou um novo console seja criado. Um processo de console filho também pode herdar as alças padrão do pai, bem como o acesso ao buffer de entrada e ao buffer de tela ativo.
  • O modo de erro, conforme definido pela funçãoSetErrorMode.
  • A máscara de afinidade do processador.
  • A associação com um emprego.

O processo filho não herda o seguinte:

Herdando alças

Um processo filho pode herdar alguns dos identificadores de seu pai, mas não herdar outros. Para fazer com que um identificador seja herdado, você deve fazer duas coisas:

  • Especifique que o identificador deve ser herdado quando você criar, abrir ou duplicar o identificador. As funções de criação normalmente usam o bInheritHandle membro de uma estrutura SECURITY_ATTRIBUTES para essa finalidade. DuplicateHandle usa o parâmetro bInheritHandles.
  • Especifique que os identificadores herdáveis devem ser herdados definindo o parâmetro bInheritHandles como TRUE ao chamar a funçãoCreateProcess. Além disso, para herdar os identificadores de entrada, saída padrão e erro padrão, o dwFlags membro da estruturaSTARTUPINFO dodeve incluir STARTF_USESTDHANDLES.

Para especificar uma lista dos identificadores que devem ser herdados por um processo filho específico, chame a funçãoUpdateProcThreadAttributecom o sinalizador PROC_THREAD_ATTRIBUTE_HANDLE_LIST.

Um identificador herdado refere-se ao mesmo objeto no processo filho como no processo pai. Ele também tem o mesmo valor e privilégios de acesso. Portanto, quando um processo altera o estado do objeto, a alteração afeta ambos os processos. Para usar um handle, o processo filho deve recuperar o valor do identificador e "conhecer" o objeto ao qual ele se refere. Normalmente, o processo pai comunica essas informações ao processo filho por meio de sua linha de comando, bloco de ambiente ou alguma forma de comunicação entre .

Use o função SetHandleInformation para controlar se um identificador existente é herdável ou não.

Herdando variáveis de ambiente

Um processo filho herda as variáveis de ambiente de seu processo pai por padrão. No entanto, CreateProcess permite que o processo pai especifique um bloco diferente de variáveis de ambiente. Para obter mais informações, consulte variáveis de ambiente.

Herdando o diretório atual

A funçãoGetCurrentDirectory dorecupera o diretório atual do processo de chamada. Um processo filho herda o diretório atual de seu processo pai por padrão. No entanto, CreateProcess permite que o processo pai especifique um diretório atual diferente para o processo filho. Para alterar o diretório atual do processo de chamada, use a funçãoSetCurrentDirectory.