Função ZwOpenProcessTokenEx (ntifs.h)
A rotina de
Sintaxe
NTSYSAPI NTSTATUS ZwOpenProcessTokenEx(
[in] HANDLE ProcessHandle,
[in] ACCESS_MASK DesiredAccess,
[in] ULONG HandleAttributes,
[out] PHANDLE TokenHandle
);
Parâmetros
[in] ProcessHandle
Manipule para o processo cujo token de acesso deve ser aberto. O identificador deve ter acesso PROCESS_QUERY_INFORMATION. Use a macro NtCurrentProcess, definida em Ntddk.h, para especificar o processo atual.
[in] DesiredAccess
ACCESS_MASK estrutura especificando os tipos de acesso solicitados ao token de acesso. Esses tipos de acesso solicitados são comparados com a lista de controle de acesso discricionário do token (DACL) para determinar quais acessos são concedidos ou negados.
[in] HandleAttributes
Atributos para o identificador de token de acesso. No momento, há suporte apenas OBJ_KERNEL_HANDLE. Se o chamador não estiver em execução no contexto do processo do sistema, ele deverá especificar OBJ_KERNEL_HANDLE para esse parâmetro.
[out] TokenHandle
Ponteiro para uma variável alocada por chamador que recebe um identificador para o token de acesso recém-aberto.
Valor de retorno
ZwOpenProcessTokenEx retorna STATUS_SUCCESS ou um status de erro apropriado. Os códigos de status de erro possíveis incluem o seguinte:
Código de retorno | Descrição |
---|---|
STATUS_ACCESS_DENIED | ProcessHandle não tinha acesso PROCESS_QUERY_INFORMATION. |
STATUS_INSUFFICIENT_RESOURCES | Não foi possível alocar um novo identificador de token. |
STATUS_INVALID_HANDLE | ProcessHandle não era um identificador válido. |
STATUS_INVALID_PARAMETER | O HandleAttributes |
STATUS_OBJECT_TYPE_MISMATCH | ProcessHandle não era um identificador de processo. |
STATUS_PRIVILEGE_NOT_HELD | O chamador não tem o privilégio (SeSecurityPrivilege) necessário para criar um identificador de token com o acesso especificado no parâmetro DesiredAccess. |
STATUS_QUOTA_EXCEEDED | A cota de memória do processo não é suficiente para alocar o identificador de token. |
STATUS_UNSUCCESSFUL | O identificador de token não pôde ser criado. |
Observações
ZwOpenProcessTokenEx abre o token de acesso associado a um processo e retorna um identificador para esse token.
Qualquer identificador obtido chamando ZwOpenProcessTokenEx deve eventualmente ser liberado chamando ZwClose.
As rotinas de driver executadas em um contexto de processo diferente do processo do sistema devem definir o atributo OBJ_KERNEL_HANDLE para o parâmetro HandleAttributes de ZwOpenProcessTokenEx. Isso restringe o uso do identificador retornado por ZwOpenProcessTokenEx a processos em execução no modo kernel. Caso contrário, o identificador pode ser acessado pelo processo em cujo contexto o driver está em execução.
Para obter mais informações sobre segurança e controle de acesso, consulte modelo de segurança do Windows para desenvolvedores de driver e a documentação sobre esses tópicos no SDK do Windows.
Nota
Se a chamada para a função ZwOpenProcessTokenEx ocorrer no modo de usuário, você deverá usar o nome "NtOpenProcessTokenEx" em vez de "ZwOpenProcessTokenEx".
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 XP |
da Plataforma de Destino |
Universal |
cabeçalho | ntifs.h (inclua Ntifs.h) |
biblioteca | NtosKrnl.lib |
de DLL |
NtosKrnl.exe |
IRQL | PASSIVE_LEVEL |
regras de conformidade de DDI | HwStorPortProhibitedDIs(storport), PowerIrpDDis(wdm) |
Consulte também
usando versões Nt e Zw das rotinas de serviços do sistema nativo