Compartilhar via


Direitos de acesso e segurança de thread

O Microsoft Windows permite controlar o acesso a objetos de thread. Para obter mais informações sobre segurança, consulte Modelo de controle de acesso.

Você pode especificar um descritor de segurança para um thread ao chamar a função CreateProcess, CreateProcessAsUser, CreateProcessWithLogonW, CreateThread ou 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 primário 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ção SetSecurityInfo .

O identificador retornado pela função CreateThreadtem THREAD_ALL_ACCESS acesso ao objeto thread. Quando você chama a função GetCurrentThread , o sistema retorna um pseudohandle 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 os direitos de acesso padrão e alguns direitos de acesso específicos do thread. A tabela a seguir lista os direitos de acesso padrão usados por todos os objetos.

Valor Significado
DELETE (0x00010000L) Necessário para excluir o objeto.
READ_CONTROL (0x00020000L) Necessário para ler informações no descritor de segurança do objeto, não incluindo as informações na SACL. Para ler ou gravar a SACL, você deve solicitar o direito de acesso ACCESS_SYSTEM_SECURITY . Para obter mais informações, confira Direito de Acesso à SACL.
SYNCHRONIZE (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
SYNCHRONIZE (0x00100000L) Habilita o uso do identificador de thread em qualquer uma das funções de espera.
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 o Windows Server 2008 e o Windows Vista for executado no Windows Server 2003 ou no Windows XP, o sinalizador THREAD_ALL_ACCESS conterá bits de acesso que não têm suporte 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 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á-la 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 de 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 tem o direito de acesso THREAD_QUERY_INFORMATION é concedido automaticamente THREAD_QUERY_LIMITED_INFORMATION. Windows Server 2003 e Windows XP: Não há suporte para esse direito de acesso.
THREAD_SET_CONTEXT (0x0010) Necessário para gravar 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 tem o direito de acesso THREAD_SET_INFORMATION é concedido automaticamente THREAD_SET_LIMITED_INFORMATION. Windows Server 2003 e Windows XP: Não há suporte para esse direito de acesso.
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 acesso ACCESS_SYSTEM_SECURITY direito a um objeto thread se quiser ler ou gravar a SACL do objeto. Para obter mais informações, consulte ACLs (Listas de Controle de Acesso) e Direito de Acesso à SACL.

Processos protegidos

Os processos protegidos aprimoram o suporte para o Digital Rights Management. O sistema restringe o acesso a processos protegidos e aos threads de processos protegidos.

Windows Server 2003 e Windows XP: Os 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 de THREAD_QUERY_LIMITED_INFORMATION foi introduzido para fornecer acesso a um subconjunto das informações disponíveis por meio de THREAD_QUERY_INFORMATION.