El error «no se encuentra el punto de entrada del procedimiento SetThreadDescription» es una falla de vinculación dinámica que ocurre cuando un ejecutable compilado contra el Windows 10 SDK (1709+) intenta ejecutarse en un kernel anterior a Windows 10 1607.
Lo que la documentación oficial no especifica es que SetThreadDescription existe en kernel32.dll desde la build 14393, pero el linker no lo resuelve contra la DLL del sistema sino contra api-ms-win-core-processthreads-l1-1-3.dll. En producción, esto se traduce en que el error no aparece al iniciar el proceso, sino en la primera llamada a la función, cuando el lazy binding del import table falla silenciosamente y el cargador no encuentra el reenvío en sistemas legacy.
El valor umbral es la build 14393. Por debajo de ella, api-ms-win-core-processthreads-l1-1-3.dll no contiene el forwarder al punto real en kernel32. Ejecuta dumpbin /imports tu_ejecutable.exe | findstr SetThreadDescription para verificar contra qué API set resuelve tu binario. Si la salida muestra la DLL de API set umbrella y no kernel32 directamente, tienes el problema. Corrige compilando con _WIN32_WINNT=0x0A00 y NTDDI_VERSION=0x0A000000 para forzar el enlace directo contra kernel32. Alternativamente, usa GetProcAddress(GetModuleHandle(L"kernel32.dll"), "SetThreadDescription") para carga dinámica con fallback silencioso a NOP si el puntero es nulo.
En mi experiencia con telemetría de crash dumps en flotas heterogéneas de Windows, el error más común al aplicar esto es asumir que el manifiesto de compatibilidad o un VerifyVersionInfo bastan como guarda. La primera vez que implementé esto, aprendí que la verificación de versión previene la ejecución del código, pero no la resolución de la IAT, que ocurre en el entry point antes de que tu WinMain tenga control.