Share via


Funzione ZwDuplicateObject (ntifs.h)

La routine ZwDuplicateObject crea un handle duplicato dell'handle di origine specificato.

Sintassi

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
);

Parametri

[in] SourceProcessHandle

Handle per il processo di origine per l'handle duplicato.

[in] SourceHandle

Handle da duplicare.

[in, optional] TargetProcessHandle

Handle per il processo di destinazione che deve ricevere il nuovo handle. Questo parametro è facoltativo e può essere specificato come NULL se il flag di DUPLICATE_CLOSE_SOURCE è impostato in Opzioni.

[out, optional] TargetHandle

Puntatore a una variabile HANDLE in cui la routine scrive il nuovo handle duplicato. L'handle duplicato è valido nel processo di destinazione specificato. Questo parametro è facoltativo e può essere specificato come NULL se non viene creato alcun handle duplicato.

[in] DesiredAccess

Valore ACCESS_MASK che specifica l'accesso desiderato per il nuovo handle.

[in] HandleAttributes

ULONG che specifica gli attributi desiderati per il nuovo handle. Per altre informazioni sugli attributi, vedere la descrizione del membro Attributes in OBJECT_ATTRIBUTES.

[in] Options

Set di flag per controllare il comportamento dell'operazione di duplicazione. Impostare questo parametro su zero o sull'OR bit per bit di uno o più dei flag seguenti.

Nome flag Descrizione
DUPLICATE_SAME_ATTRIBUTES Anziché usare il parametro HandleAttributes , copiare gli attributi dall'handle di origine all'handle di destinazione.
DUPLICATE_SAME_ACCESS Anziché usare il parametro DesiredAccess , copiare i diritti di accesso dall'handle di origine all'handle di destinazione.
DUPLICATE_CLOSE_SOURCE Chiudere l'handle di origine.

Valore restituito

ZwDuplicateObject restituisce STATUS_SUCCESS se la chiamata ha esito positivo. In caso contrario, restituisce un codice di stato di errore appropriato.

Commenti

L'handle di origine viene valutato nel contesto del processo di origine specificato. Il processo di chiamata deve avere PROCESS_DUP_HANDLE accesso al processo di origine. L'handle duplicato viene creato nella tabella handle del processo di destinazione specificato. Il processo di chiamata deve avere PROCESS_DUP_HANDLE accesso al processo di destinazione.

Per impostazione predefinita, l'handle duplicato viene creato con gli attributi specificati dal parametro HandleAttributes e con i diritti di accesso specificati dal parametro DesiredAccess . Se necessario, il chiamante può eseguire l'override di uno o entrambi i valori predefiniti impostando i flag di DUPLICATE_SAME_ATTRIBUTES e DUPLICATE_SAME_ACCESS nel parametro Opzioni .

Se la chiamata a questa funzione si verifica in modalità utente, è necessario usare il nome "NtDuplicateObject" anziché "ZwDuplicateObject".

Per le chiamate dai driver in modalità kernel, le versioni NtXxx e ZwXxx di una routine di Windows Native System Services possono comportarsi in modo diverso nel modo in cui gestiscono e interpretano i parametri di input. Per altre informazioni sulla relazione tra le versioni NtXxx e ZwXxx di una routine, vedere Uso di nt e zw versioni delle routine di Servizi di sistema nativo.

Requisiti

Requisito Valore
Client minimo supportato Windows 2000.
Piattaforma di destinazione Universale
Intestazione ntifs.h (include Ntdef.h, Ntifs.h, Fltkernel.h)
Libreria Ntoskrnl.lib
IRQL PASSIVE_LEVEL

Vedi anche

ACCESS_MASK

OBJECT_ATTRIBUTES

Uso di nt e zw versioni delle routine di Servizi di sistema nativo