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.