Função NtOpenProcessTokenEx (ntifs.h)
A rotina de NtOpenProcessTokenEx abre o token de acesso associado a um processo e retorna um identificador que pode ser usado para acessar esse token.
Sintaxe
__kernel_entry NTSYSCALLAPI NTSTATUS NtOpenProcessTokenEx(
[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
NtOpenProcessTokenEx 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 especificado não incluiu OBJ_KERNEL_HANDLE. |
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
Qualquer identificador obtido chamando NtOpenProcessTokenEx deve eventualmente ser liberado chamando NtClose.
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 NtOpenProcessTokenEx. Isso restringe o uso do identificador retornado por NtOpenProcessTokenEx 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.
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, PowerIrpDDis |