Compartir a través de


Función TlsGetValue (processthreadsapi.h)

Recupera el valor de la ranura de almacenamiento local (TLS) del subproceso que llama para el índice TLS especificado. Cada subproceso de un proceso tiene su propia ranura para cada índice TLS.

Sintaxis

LPVOID TlsGetValue(
  [in] DWORD dwTlsIndex
);

Parámetros

[in] dwTlsIndex

Índice TLS asignado por la función TlsAlloc.

Valor devuelto

Si la función se ejecuta correctamente, el valor devuelto es el valor almacenado en la ranura TLS del subproceso de llamada asociada al índice especificado. Si dwTlsIndex es un índice válido asignado por una llamada correcta a TlsAlloc, esta función siempre se realiza correctamente.

Si se produce un error en la función, el valor devuelto es cero. Para obtener información de error extendida, llame a GetLastError.

Los datos almacenados en una ranura TLS pueden tener un valor de 0 porque todavía tiene su valor inicial o porque el subproceso llamó a la función TlsSetValue con 0. Por lo tanto, si el valor devuelto es 0, debe comprobar si GetLastError devuelve ERROR_SUCCESS antes de determinar que se ha producido un error en la función. Si GetLastError devuelve ERROR_SUCCESS, la función se ha realizado correctamente y los datos almacenados en la ranura TLS son 0. De lo contrario, se ha producido un error en la función.

Funciones que devuelven indicaciones de llamada de error SetLastError cuando se produce un error. Por lo general, no llaman a SetLastError cuando se realizan correctamente. La función TlsGetValue es una excepción a esta regla general. La función TlsGetValue llama a SetLastError para borrar el último error de un subproceso cuando se realiza correctamente. Esto permite comprobar la recuperación sin errores de cero valores.

Observaciones

windows 8.1, Windows Server 2012 R2y Windows 10, versión 1507: esta función es compatible con las aplicaciones de la Tienda Windows en Windows 8.1, Windows Server 2012 R2 y Windows 10, versión 1507. Cuando una aplicación de la Tienda Windows llama a esta función, se reemplaza por una llamada insertada a FlsGetValue. Consulte FlsGetValue para obtener documentación sobre la función.

Windows 10, versión 1511 y Windows 10, versión 1607: esta función es totalmente compatible con las aplicaciones de la Plataforma universal de Windows (UWP) y ya no se reemplaza por una llamada insertada a FlsGetValue.

Normalmente, los índices TLS se asignan mediante la función TlsAlloc durante la inicialización del proceso o dll. Después de asignar un índice TLS, cada subproceso del proceso puede usarlo para acceder a su propia ranura TLS para ese índice. Un subproceso especifica un índice TLS en una llamada a TlsSetValue para almacenar un valor en su ranura. El subproceso especifica el mismo índice en una llamada posterior a tlsGetValue para recuperar el valor almacenado.

TlsGetValue se implementó con velocidad como objetivo principal. La función realiza la validación mínima de parámetros y la comprobación de errores. En concreto, se realiza correctamente si dwTlsIndex está en el intervalo de 0 a (TLS_MINIMUM_AVAILABLE– 1). Es necesario que el programador asegúrese de que el índice es válido y que el subproceso llama a TlsSetValue antes de llamar a TlsGetValue.

TlsGetValue siempre establece el último error de un subproceso. En algunos casos, es posible que una aplicación (como aquellas con montones personalizados que admitan malloc) necesite llamar a GetLastError antes de llamar a TlsGetValue para guardar el último error del subproceso (seguido de SetLastError para restaurar el error guardado). Desafortunadamente, esto puede suponer un costo de rendimiento no trivial en determinadas CPU.

Windows 11 24H2 y versiones posteriores: Usar la función tlsGetValue2 , que es idéntica a TlsGetValue excepto que no establece el último error del subproceso. Las aplicaciones que llaman TlsGetValue2 deben evitar usar 0 como un valor válido porque no se puede llamar a GetLastError para comprobar si error de TlsGetValue2.

Ejemplos

Para obtener un ejemplo, consulte Using Thread Local Storage or Using Thread Local Storage in a Dynamic-Link Library.

Requisitos

Requisito Valor
cliente mínimo admitido Windows XP [aplicaciones de escritorio | Aplicaciones para UWP]
servidor mínimo admitido Windows Server 2003 [aplicaciones de escritorio | Aplicaciones para UWP]
de la plataforma de destino de Windows
encabezado de processthreadsapi.h (incluya Windows.h en Windows Vista, Windows 7, Windows Server 2008 Windows Server 2008 R2)
biblioteca de Kernel32.lib; WindowsPhoneCore.lib en Windows Phone 8.1
DLL de KernelBase.dll en Windows Phone 8.1; Kernel32.dll

Consulte también

TlsGetValue2

funciones de proceso y subproceso de

de almacenamiento local de subprocesos

TlsAlloc

TlsFree

TlsSetValue

API de Vertdll disponibles en enclaves de VBS