Condividi tramite


Funzione NtOpenProcessTokenEx (ntifs.h)

La routine NtOpenProcessTokenEx apre il token di accesso associato a un processo e restituisce un handle che può essere usato per accedere a tale token.

Sintassi

__kernel_entry NTSYSCALLAPI NTSTATUS NtOpenProcessTokenEx(
  [in]  HANDLE      ProcessHandle,
  [in]  ACCESS_MASK DesiredAccess,
  [in]  ULONG       HandleAttributes,
  [out] PHANDLE     TokenHandle
);

Parametri

[in] ProcessHandle

Gestire il processo il cui token di accesso deve essere aperto. L'handle deve avere accesso PROCESS_QUERY_INFORMATION. Usare la macro NtCurrentProcess , definita in Ntddk.h, per specificare il processo corrente.

[in] DesiredAccess

ACCESS_MASK struttura che specifica i tipi richiesti di accesso al token di accesso. Questi tipi di accesso richiesti vengono confrontati con l'elenco di controllo degli accessi discrezionali del token per determinare quali accessi vengono concessi o negati.

[in] HandleAttributes

Attributi per l'handle del token di accesso. Attualmente è supportato solo OBJ_KERNEL_HANDLE. Se il chiamante non è in esecuzione nel contesto del processo di sistema, deve specificare OBJ_KERNEL_HANDLE per questo parametro.

[out] TokenHandle

Puntatore a una variabile allocata dal chiamante che riceve un handle al token di accesso appena aperto.

Valore restituito

NtOpenProcessTokenEx restituisce STATUS_SUCCESS o uno stato di errore appropriato. I codici di stato degli errori possibili includono quanto segue:

Codice restituito Descrizione
STATUS_ACCESS_DENIED ProcessHandle non ha PROCESS_QUERY_INFORMATION accesso.
STATUS_INSUFFICIENT_RESOURCES Impossibile allocare un nuovo handle di token.
STATUS_INVALID_HANDLE ProcessHandle non era un handle valido.
STATUS_INVALID_PARAMETER HandleAttributes specificato non includeva OBJ_KERNEL_HANDLE.
STATUS_OBJECT_TYPE_MISMATCH ProcessHandle non era un handle di processo.
STATUS_PRIVILEGE_NOT_HELD Il chiamante non dispone del privilegio (SeSecurityPrivilege) necessario per creare un handle di token con l'accesso specificato nel parametro DesiredAccess .
STATUS_QUOTA_EXCEEDED La quota di memoria del processo non è sufficiente per allocare l'handle del token.
STATUS_UNSUCCESSFUL Impossibile creare l'handle del token.

Commenti

Qualsiasi handle ottenuto chiamando NtOpenProcessTokenEx deve essere rilasciato chiamando NtClose.

Le routine del driver eseguite in un contesto di processo diverso da quello del processo di sistema devono impostare l'attributo OBJ_KERNEL_HANDLE per il parametro HandleAttributes di NtOpenProcessTokenEx. Ciò limita l'uso dell'handle restituito da NtOpenProcessTokenEx ai processi in esecuzione in modalità kernel. In caso contrario, l'handle può essere accessibile dal processo nel cui contesto è in esecuzione il driver.

Per altre informazioni sul controllo di sicurezza e accesso, vedere Modello di sicurezza di Windows per sviluppatori driver e la documentazione su questi argomenti in Windows SDK.

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 XP
Piattaforma di destinazione Universale
Intestazione ntifs.h (include Ntifs.h)
Libreria NtosKrnl.lib
DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL
Regole di conformità DDI HwStorPortProhibitedDDIs, PowerIrpDDis

Vedi anche

ACCESS_MASK

ACL

PsDereferencePrimaryToken

NtClose

NtOpenThreadTokenEx