Compartilhar via


Função TlsGetValue (processthreadsapi.h)

Recupera o valor no slot TLS (armazenamento local do thread de chamada) para o índice TLS especificado. Cada thread de um processo tem seu próprio slot para cada índice TLS.

Sintaxe

LPVOID TlsGetValue(
  [in] DWORD dwTlsIndex
);

Parâmetros

[in] dwTlsIndex

O índice TLS alocado pela função TlsAlloc.

Valor de retorno

Se a função for bem-sucedida, o valor retornado será o valor armazenado no slot TLS do thread de chamada associado ao índice especificado. Se dwTlsIndex for um índice válido alocado por uma chamada bem-sucedida para TlsAlloc, essa função sempre terá êxito.

Se a função falhar, o valor retornado será zero. Para obter informações de erro estendidas, chame GetLastError.

Os dados armazenados em um slot TLS podem ter um valor de 0 porque ainda tem seu valor inicial ou porque o thread chamado TlsSetValue função com 0. Portanto, se o valor retornado for 0, você deverá verificar se GetLastError retorna ERROR_SUCCESS antes de determinar se a função falhou. Se GetLastError retornar ERROR_SUCCESS, a função terá êxito e os dados armazenados no slot do TLS serão 0. Caso contrário, a função falhou.

Funções que retornam indicações de chamada de falha SetLastError quando falham. Eles geralmente não chamam SetLastError quando tiverem êxito. A função TlsGetValue é uma exceção a essa regra geral. A função TlsGetValue chama SetLastError para limpar o último erro de um thread quando ele for bem-sucedido. Isso permite verificar a recuperação sem erros de valores zero.

Observações

Windows 8.1, Windows Server 2012 R2e Windows 10, versão 1507: essa função tem suporte para aplicativos da Windows Store no Windows 8.1, Windows Server 2012 R2 e Windows 10, versão 1507. Quando um aplicativo da Windows Store chama essa função, ela é substituída por uma chamada embutida para flsGetValue. Consulte FlsGetValue para obter a documentação da função.

Windows 10, versão 1511 e Windows 10, versão 1607: essa função é totalmente compatível com aplicativos da Plataforma Universal do Windows (UWP) e não é mais substituída por uma chamada embutida para FlsGetValue.

Os índices TLS normalmente são alocados pela função TlsAlloc durante a inicialização do processo ou da DLL. Depois que um índice TLS é alocado, cada thread do processo pode usá-lo para acessar seu próprio slot TLS para esse índice. Um thread especifica um índice TLS em uma chamada para TlsSetValue para armazenar um valor em seu slot. O thread especifica o mesmo índice em uma chamada subsequente para TlsGetValue para recuperar o valor armazenado.

TlsGetValue foi implementado com velocidade como o objetivo principal. A função executa validação mínima de parâmetro e verificação de erros. Em particular, ele terá êxito se dwTlsIndex estiver no intervalo de 0 a (TLS_MINIMUM_AVAILABLE– 1). Cabe ao programador garantir que o índice seja válido e que o thread chame TlsSetValue antes de chamar TlsGetValue.

TlsGetValue sempre define o último erro de um thread. Em alguns casos, um aplicativo (como aqueles com heaps personalizados que dão suporte a malloc) pode precisar chamar GetLastError antes de chamar TlsGetValue para salvar o último erro do thread (seguido por SetLastError para restaurar o erro salvo). Infelizmente, isso pode incorrer em um custo de desempenho não trivial em determinadas CPUs.

Windows 11 24H2 e posterior: Use a função TlsGetValue2, que é idêntica a TlsGetValue, exceto por não definir o último erro do thread. Os aplicativos que chamam TlsGetValue2 devem evitar o uso de 0 como um valor válido porque GetLastError não podem ser chamados para verificar se TlsGetValue2 falhou.

Exemplos

Para obter um exemplo, consulte usando de Armazenamento Local de Thread ou usando o Armazenamento Local de Thread em umde Biblioteca de Dynamic-Link .

Requisitos

Requisito Valor
de cliente com suporte mínimo Windows XP [aplicativos da área de trabalho | Aplicativos UWP]
servidor com suporte mínimo Windows Server 2003 [aplicativos da área de trabalho | Aplicativos UWP]
da Plataforma de Destino Windows
cabeçalho processthreadsapi.h (inclua Windows.h no Windows Vista, Windows 7, Windows Server 2008 Windows Server 2008 R2)
biblioteca Kernel32.lib; WindowsPhoneCore.lib no Windows Phone 8.1
de DLL KernelBase.dll no Windows Phone 8.1; Kernel32.dll

Consulte também

TlsGetValue2

Funções de processo e thread

Thread Local Storage

TlsAlloc

TlsFree

TlsSetValue

APIs Vertdll disponíveis em enclaves de VBS