Compartilhar via


Função ZwDuplicateObject (ntifs.h)

A rotina de 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 de DUPLICATE_CLOSE_SOURCE estiver definido no 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 atributos 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.

Valor de retorno

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

Observações

O identificador de origem é avaliado no contexto do processo de origem especificado. O processo de chamada deve ter acesso PROCESS_DUP_HANDLE ao processo de origem. O identificador duplicado é criado na tabela de identificadores do processo de destino especificado. O processo de chamada deve ter acesso PROCESS_DUP_HANDLE 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 opções de .

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 versões de uma rotina dos Serviços de 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 de serviços do sistema nativo.

Requisitos

Requisito Valor
de cliente com suporte mínimo Windows 2000.
da Plataforma de Destino Universal
cabeçalho ntifs.h (incluem Ntdef.h, Ntifs.h, Fltkernel.h)
biblioteca Ntoskrnl.lib
IRQL PASSIVE_LEVEL

Consulte também

ACCESS_MASK

OBJECT_ATTRIBUTES

usando versões Nt e Zw das rotinas de serviços do sistema nativo