Función ZwDuplicateObject (ntifs.h)

La rutina ZwDuplicateObject crea un identificador que es un duplicado del identificador de origen especificado.

Sintaxis

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

Identificador del proceso de origen para el identificador que se va a duplicar.

[in] SourceHandle

Identificador que se va a duplicar.

[in, optional] TargetProcessHandle

Identificador del proceso de destino que va a recibir el nuevo identificador. Este parámetro es opcional y se puede especificar como NULL si la marca de DUPLICATE_CLOSE_SOURCE está establecida en Opciones.

[out, optional] TargetHandle

Puntero a una variable HANDLE en la que la rutina escribe el nuevo identificador duplicado. El identificador duplicado es válido en el proceso de destino especificado. Este parámetro es opcional y se puede especificar como NULL si no se va a crear ningún identificador duplicado.

[in] DesiredAccess

Valor ACCESS_MASK que especifica el acceso deseado para el nuevo identificador.

[in] HandleAttributes

ULONG que especifica los atributos deseados para el nuevo identificador. Para obtener más información sobre los atributos, vea la descripción del miembro Attributes en OBJECT_ATTRIBUTES.

[in] Options

Conjunto de marcas para controlar el comportamiento de la operación de duplicación. Establezca este parámetro en cero o en el OR bit a bit de una o varias de las marcas siguientes.

Nombre del marcador Descripción
DUPLICATE_SAME_ATTRIBUTES En lugar de usar el parámetro HandleAttributes , copie los atributos del identificador de origen en el identificador de destino.
DUPLICATE_SAME_ACCESS En lugar de usar el parámetro DesiredAccess , copie los derechos de acceso del identificador de origen en el identificador de destino.
DUPLICATE_CLOSE_SOURCE Cierre el identificador de origen.

Valor devuelto

ZwDuplicateObject devuelve STATUS_SUCCESS si la llamada es correcta. De lo contrario, devuelve un código de estado de error adecuado.

Comentarios

El identificador de origen se evalúa en el contexto del proceso de origen especificado. El proceso de llamada debe tener PROCESS_DUP_HANDLE acceso al proceso de origen. El identificador duplicado se crea en la tabla de identificadores del proceso de destino especificado. El proceso de llamada debe tener PROCESS_DUP_HANDLE acceso al proceso de destino.

De forma predeterminada, el identificador duplicado se crea con los atributos especificados por el parámetro HandleAttributes y con los derechos de acceso especificados por el parámetro DesiredAccess . Si es necesario, el autor de la llamada puede invalidar uno o ambos valores predeterminados estableciendo las marcas DUPLICATE_SAME_ATTRIBUTES y DUPLICATE_SAME_ACCESS en el parámetro Options .

Si la llamada a esta función se produce en modo de usuario, debe usar el nombre "NtDuplicateObject" en lugar de "ZwDuplicateObject".

En el caso de las llamadas desde controladores en modo kernel, las versiones NtXxx y ZwXxx de una rutina de Servicios del sistema nativo de Windows se pueden comportar de forma diferente en la forma en que controlan e interpretan los parámetros de entrada. Para obtener más información sobre la relación entre las versiones NtXxx y ZwXxx de una rutina, vea Using Nt and Zw Versions of the Native System Services Routines.

Requisitos

Requisito Value
Cliente mínimo compatible Windows 2000.
Plataforma de destino Universal
Encabezado ntifs.h (incluya Ntdef.h, Ntifs.h, Fltkernel.h)
Library Ntoskrnl.lib
IRQL PASSIVE_LEVEL

Consulte también

ACCESS_MASK

OBJECT_ATTRIBUTES

Uso de las versiones Nt y Zw de las rutinas nativas de Servicios del sistema