Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
O modelo de segurança do Microsoft Windows permite controlar o acesso a objetos de processo. Para obter mais informações sobre segurança, consulte Access-Control Model.
Quando um usuário faz login, o sistema coleta um conjunto de dados que identifica exclusivamente o usuário durante o processo de autenticação e os armazena em um token de acesso . Este token de acesso descreve o contexto de segurança de todos os processos associados ao utilizador. O contexto de segurança de um processo é o conjunto de credenciais dadas ao processo ou à conta de usuário que criou o processo.
Você pode usar um token para especificar o contexto de segurança atual para um processo usando a funçãoCreateProcessWithTokenW. Você pode especificar um descritor de segurança para um processo ao chamar o CreateProcess, CreateProcessAsUserou função de CreateProcessWithLogonW. Se você especificar NULL , o processo obterá um descritor de segurança padrão. As ACLs no descritor de segurança padrão para um processo vêm do token principal ou de representação do criador.
Para recuperar o descritor de segurança de um processo, chame o função GetSecurityInfo. Para alterar o descritor de segurança de um processo, chame a funçãoSetSecurityInfo.
Os direitos de acesso válidos para objetos de processo incluem os direitos de acesso padrão e alguns direitos de acesso específicos do processo. A tabela a seguir lista os direitos de acesso padrão usados por todos os objetos.
| Valor | Significado |
|---|---|
| EXCLUIR (0x00010000L) | Necessário para excluir o objeto. |
| READ_CONTROL (0x00020000L) | Necessário para ler informações no descritor de segurança para o objeto, não incluindo as informações na SACL. Para ler ou escrever a SACL, você deve solicitar o direito de acesso ACCESS_SYSTEM_SECURITY. Para obter mais informações, consulte SACL Access Right. |
| SINCRONIZAR (0x00100000L) | O direito de usar o objeto para sincronização. Isso permite que um thread aguarde até que o objeto esteja no estado sinalizado. |
| WRITE_DAC (0x00040000L) | Necessário para modificar a DACL no descritor de segurança do objeto. |
| WRITE_OWNER (0x00080000L) | Necessário para alterar o proprietário no descritor de segurança para o objeto. |
A tabela a seguir lista os direitos de acesso específicos do processo.
| Valor | Significado |
|---|---|
| PROCESS_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED (0x000F0000L) | SINCRONIZAR (0x00100000L) | 0xFFFF) | Todos os direitos de acesso possíveis para um objeto de processo.Windows Server 2003 e Windows XP: O tamanho do sinalizador de PROCESS_ALL_ACCESS aumentou no Windows Server 2008 e no Windows Vista. Se um aplicativo compilado para Windows Server 2008 e Windows Vista for executado no Windows Server 2003 ou Windows XP, o sinalizador PROCESS_ALL_ACCESS será muito grande e a função que especifica esse sinalizador falhará com ERROR_ACCESS_DENIED. Para evitar esse problema, especifique o conjunto mínimo de direitos de acesso necessários para a operação. Se PROCESS_ALL_ACCESS precisar ser usado, defina _WIN32_WINNT como o sistema operacional mínimo direcionado pelo seu aplicativo (por exemplo, #define _WIN32_WINNT _WIN32_WINNT_WINXP). Para obter mais informações, consulte Usando os cabeçalhos do Windows. |
| PROCESS_CREATE_PROCESS (0x0080) | Necessário para usar este processo como o processo pai com PROC_THREAD_ATTRIBUTE_PARENT_PROCESS. |
| PROCESS_CREATE_THREAD (0x0002) | Necessário para criar um thread no processo. |
| PROCESS_DUP_HANDLE (0x0040) | Necessário para duplicar um identificador usando DuplicateHandle. |
| PROCESS_QUERY_INFORMATION (0x0400) | Necessário para recuperar certas informações sobre um processo, como seu token, código de saída e classe de prioridade (consulte OpenProcessToken). |
| PROCESS_QUERY_LIMITED_INFORMATION (0x1000) | Necessário para recuperar determinadas informações sobre um processo (consulte GetExitCodeProcess, GetPriorityClassIsProcessInJobQueryFullProcessImageName). Um identificador que tenha o direito de acesso PROCESS_QUERY_INFORMATION é concedido automaticamente PROCESS_QUERY_LIMITED_INFORMATION.Windows Server 2003 e Windows XP: Este direito de acesso não é suportado. |
| PROCESS_SET_INFORMATION (0x0200) | Necessário para definir determinadas informações sobre um processo, como sua classe de prioridade (consulte SetPriorityClass). |
| PROCESS_SET_QUOTA (0x0100) | Necessário para definir limites de memória usando SetProcessWorkingSetSize. |
| PROCESS_SUSPEND_RESUME (0x0800) | Necessário para suspender ou retomar um processo. |
| PROCESS_TERMINATE (0x0001) | Necessário para encerrar um processo usando TerminateProcess. |
| PROCESS_VM_OPERATION (0x0008) | Necessário para executar uma operação no espaço de endereço de um processo (consulte VirtualProtectEx e WriteProcessMemory). |
| PROCESS_VM_READ (0x0010) | Necessário para ler a memória em um processo usando ReadProcessMemory. |
| PROCESS_VM_WRITE (0x0020) | Necessário para gravar na memória em um processo usando WriteProcessMemory. |
| SINCRONIZAR (0x00100000L) | Necessário aguardar o encerramento do processo usando as funções wait. |
Para abrir um identificador para outro processo e obter direitos de acesso completos, você deve habilitar o SeDebugPrivilege privilégio. Para obter mais informações, consulte alterando privilégios em um token.
O identificador retornado pela funçãoCreateProcess tem acesso PROCESS_ALL_ACCESS ao objeto de processo. Quando você chama o função OpenProcess, o sistema verifica os direitos de acesso solicitados em relação à DACL no descritor de segurança do processo. Quando você chama o função GetCurrentProcess, o sistema retorna um pseudohandle com o acesso máximo que a DACL permite ao chamador.
Você pode solicitar o direito de acesso ACCESS_SYSTEM_SECURITY a um objeto de processo se quiser ler ou gravar a SACL do objeto. Para obter mais informações, consulte Listas de Access-Control (ACLs) e de Direito de Acesso SACL.
Advertência
Um processo que tenha alguns dos direitos de acesso mencionados aqui pode usá-los para obter outros direitos de acesso. Por exemplo, se o processo A tiver um identificador para processar B com acesso PROCESS_DUP_HANDLE, ele poderá duplicar o pseudoidentificador do processo B. Isso cria um identificador que tem acesso máximo ao processo B. Para obter mais informações sobre pseudo identificadores, consulte GetCurrentProcess.
Processos protegidos
O Windows Vista introduz processos protegidos para melhorar o suporte ao Gerenciamento de Direitos Digitais. O sistema restringe o acesso a processos protegidos e aos threads de processos protegidos.
Os seguintes direitos de acesso padrão não são permitidos de um processo para um processo protegido:
- EXCLUIR
- READ_CONTROL
- WRITE_DAC
- WRITE_OWNER
Os seguintes direitos de acesso específicos não são permitidos de um processo para um processo protegido:
- PROCESS_ALL_ACCESS
- PROCESS_CREATE_PROCESS
- PROCESS_CREATE_THREAD
- PROCESS_DUP_HANDLE
- PROCESS_QUERY_INFORMATION
- PROCESS_SET_INFORMATION
- PROCESS_SET_QUOTA
- PROCESS_VM_OPERATION
- PROCESS_VM_READ
- PROCESS_VM_WRITE
O direito PROCESS_QUERY_LIMITED_INFORMATION foi introduzido para facultar o acesso a um subconjunto das informações disponíveis através do PROCESS_QUERY_INFORMATION.