Função ZwDuplicateObject (ntifs.h)

A rotina ZwDuplicateObject cria um identificador que é uma duplicata do identificador de origem especificado.

Sintaxe

NTSYSAPI NTSTATUS ZwDuplicateObject(
  [in]            HANDLE      SourceProcessHandle,
  [in]            HANDLE      SourceHandle,
  [in, optional]  HANDLE      TargetProcessHandle,
  [out, optional] PHANDLE     TargetHandle,
  [in]            ACCESS_MASK DesiredAccess,
  [in]            ULONG       HandleAttributes,
  [in]            ULONG       Options
);

Parâmetros

[in] SourceProcessHandle

Um identificador para o processo de origem para o identificador que está sendo duplicado.

[in] SourceHandle

O identificador a ser duplicado.

[in, optional] TargetProcessHandle

Um identificador para o processo de destino que deve receber o novo identificador. Esse parâmetro é opcional e pode ser especificado como NULL se o sinalizador DUPLICATE_CLOSE_SOURCE estiver definido em Opções.

[out, optional] TargetHandle

Um ponteiro para uma variável HANDLE na qual a rotina grava o novo identificador duplicado. O identificador duplicado é válido no processo de destino especificado. Esse parâmetro é opcional e pode ser especificado como NULL se nenhum identificador duplicado for criado.

[in] DesiredAccess

Um valor ACCESS_MASK que especifica o acesso desejado para o novo identificador.

[in] HandleAttributes

Um ULONG que especifica os atributos desejados para o novo identificador. Para obter mais informações sobre atributos, consulte a descrição do membro Attributes no OBJECT_ATTRIBUTES.

[in] Options

Um conjunto de sinalizadores para controlar o comportamento da operação de duplicação. Defina esse parâmetro como zero ou como OR bit a bit de um ou mais dos sinalizadores a seguir.

Nome do sinalizador Descrição
DUPLICATE_SAME_ATTRIBUTES Em vez de usar o parâmetro HandleAttributes , copie os atributos do identificador de origem para o identificador de destino.
DUPLICATE_SAME_ACCESS Em vez de usar o parâmetro DesiredAccess , copie os direitos de acesso do identificador de origem para o identificador de destino.
DUPLICATE_CLOSE_SOURCE Feche o identificador de origem.

Retornar valor

ZwDuplicateObject retornará STATUS_SUCCESS se a chamada for bem-sucedida. Caso contrário, ele retornará um erro apropriado status código.

Comentários

O identificador de origem é avaliado no contexto do processo de origem especificado. O processo de chamada deve ter PROCESS_DUP_HANDLE acesso ao processo de origem. O identificador duplicado é criado na tabela de identificador do processo de destino especificado. O processo de chamada deve ter PROCESS_DUP_HANDLE acesso ao processo de destino.

Por padrão, o identificador duplicado é criado com os atributos especificados pelo parâmetro HandleAttributes e com os direitos de acesso especificados pelo parâmetro DesiredAccess . Se necessário, o chamador pode substituir um ou ambos os padrões definindo os sinalizadores DUPLICATE_SAME_ATTRIBUTES e DUPLICATE_SAME_ACCESS no parâmetro Options .

Se a chamada para essa função ocorrer no modo de usuário, você deverá usar o nome "NtDuplicateObject" em vez de "ZwDuplicateObject".

Para chamadas de drivers no modo kernel, as versões NtXxx e ZwXxx de uma rotina dos Serviços do Sistema Nativo do Windows podem se comportar de forma diferente na maneira como lidam e interpretam parâmetros de entrada. Para obter mais informações sobre a relação entre as versões NtXxx e ZwXxx de uma rotina, consulte Usando versões Nt e Zw das rotinas dos Serviços de Sistema Nativo.

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows 2000.
Plataforma de Destino Universal
Cabeçalho ntifs.h (inclua Ntdef.h, Ntifs.h, Fltkernel.h)
Biblioteca Ntoskrnl.lib
IRQL PASSIVE_LEVEL

Confira também

ACCESS_MASK

OBJECT_ATTRIBUTES

Usando versões Nt e Zw das rotinas dos Serviços de Sistema Nativo