Direitos de segurança e acesso do thread
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 de descritor de segurança para um thread ao chamar a função CreateProcess, CreateProcessAsUser, CreateProcessWithLogonW, CreateThreadou 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çãoSetSecurityInfo.
O identificador retornado pela função CreateThread tem acesso THREAD_ALL_ACCESS 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 ao thread. A tabela a seguir lista os direitos de acesso padrão usados por todos os objetos.
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 thread.Windows Server 2003 e Windows XP: O valor do sinalizador de 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 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 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 que o ACCESS_SYSTEM_SECURITY acesse diretamente um objeto de thread se quiser ler ou gravar o SACL do objeto. Para obter mais informações, consulte de listas deAccess-Control (ACLs) e à direita do ACESSO SACL.
Processos protegidos
processos protegidos aprimorar 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: 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 THREAD_QUERY_LIMITED_INFORMATION direito foi introduzido para fornecer acesso a um subconjunto das informações disponíveis por meio de THREAD_QUERY_INFORMATION.