Partilhar via


Segurança de threads e direitos de acesso

O Microsoft Windows permite controlar o acesso a objetos de thread. Para obter mais informações sobre segurança, consulte Access-Control Model.

Você pode especificar um descritor de segurança para um thread ao chamar o CreateProcess, CreateProcessAsUser, CreateProcessWithLogonWCreateThreadou função CreateRemoteThread. Se você especificar NULL , o thread obterá um descritor de segurança padrão. As ACLs no descritor de segurança padrão para um thread vêm do token principal ou de representação do criador.

Para recuperar o descritor de segurança de um thread, chame a função GetSecurityInfo. Para alterar o descritor de segurança de um thread, chame a funçãoSetSecurityInfo.

O identificador retornado pela função CreateThread tem acesso THREAD_ALL_ACCESS ao objeto thread. Quando você chama o função GetCurrentThread, o sistema retorna um pseudoidentificador com o acesso máximo que o descritor de segurança do thread permite ao chamador.

Os direitos de acesso válidos para objetos de thread incluem o de direitos de acesso padrão e alguns direitos de acesso específicos de thread. 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 thread.

Valor Significado
SINCRONIZAR (0x00100000L) Permite o uso da alça de thread em qualquer uma das funções de espera de .
THREAD_ALL_ACCESS Todos os direitos de acesso possíveis para um objeto de thread.Windows Server 2003 e Windows XP: O valor do sinalizador THREAD_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 THREAD_ALL_ACCESS conterá bits de acesso que não são suportados 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 THREAD_ALL_ACCESS precisar ser usado, defina _WIN32_WINNT para 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.
THREAD_DIRECT_IMPERSONATION (0x0200) Necessário para um thread de servidor que representa um cliente.
THREAD_GET_CONTEXT (0x0008) Necessário para ler o contexto de um thread usando GetThreadContext.
THREAD_IMPERSONATE (0x0100) Necessário para usar as informações de segurança de um thread diretamente sem chamá-lo usando um mecanismo de comunicação que fornece serviços de representação.
THREAD_QUERY_INFORMATION (0x0040) Necessário para ler determinadas informações do objeto thread, como o código de saída (consulte GetExitCodeThread).
THREAD_QUERY_LIMITED_INFORMATION (0x0800) Necessário para ler determinadas informações dos objetos de thread (consulte GetProcessIdOfThread). Um identificador que tenha o direito de acesso THREAD_QUERY_INFORMATION é concedido automaticamente THREAD_QUERY_LIMITED_INFORMATION.Windows Server 2003 e Windows XP: Este direito de acesso não é suportado.
THREAD_SET_CONTEXT (0x0010) Necessário para escrever o contexto de um thread usando SetThreadContext.
THREAD_SET_INFORMATION (0x0020) Necessário para definir determinadas informações no objeto thread.
THREAD_SET_LIMITED_INFORMATION (0x0400) Necessário para definir determinadas informações no objeto thread. Um identificador que tenha o direito de acesso THREAD_SET_INFORMATION recebe automaticamente THREAD_SET_LIMITED_INFORMATION.Windows Server 2003 e Windows XP: Este direito de acesso não é suportado.
THREAD_SET_THREAD_TOKEN (0x0080) Necessário para definir o token de representação para um thread usando SetThreadToken.
THREAD_SUSPEND_RESUME (0x0002) Necessário para suspender ou retomar um thread (consulte SuspendThread e ResumeThread).
THREAD_TERMINATE (0x0001) Necessário para encerrar um thread usando TerminateThread.

 

Você pode solicitar o direito de acesso ACCESS_SYSTEM_SECURITY a um objeto de thread 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.

Processos protegidos

Processos protegidos melhorar o suporte para a Gestão de Direitos Digitais. O sistema restringe o acesso a processos protegidos e aos threads de processos protegidos.

Windows Server 2003 e Windows XP: processos protegidos foram adicionados a partir do Windows Vista.

Os seguintes direitos de acesso específicos não são permitidos de um processo para os threads de um processo protegido:

THREAD_ALL_ACCESS
THREAD_DIRECT_IMPERSONATION
THREAD_GET_CONTEXT
THREAD_IMPERSONATE
THREAD_QUERY_INFORMATION
THREAD_SET_CONTEXT
THREAD_SET_INFORMATION
THREAD_SET_TOKEN
THREAD_TERMINATE

O direito THREAD_QUERY_LIMITED_INFORMATION foi introduzido para facultar o acesso a um subconjunto das informações disponíveis através do THREAD_QUERY_INFORMATION.