You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
84 lines
2.2 KiB
84 lines
2.2 KiB
/*
|
|
* Copyright 2002-2019 Intel Corporation.
|
|
*
|
|
* This software is provided to you as Sample Source Code as defined in the accompanying
|
|
* End User License Agreement for the Intel(R) Software Development Products ("Agreement")
|
|
* section 1.L.
|
|
*
|
|
* This software and the related documents are provided as is, with no express or implied
|
|
* warranties, other than those that are expressly stated in the License.
|
|
*/
|
|
|
|
#include <Windows.h>
|
|
#include <stdio.h>
|
|
|
|
//TlS usage in application
|
|
static const int RESEREVED_TLS = 100;
|
|
DWORD tlsIndexes[RESEREVED_TLS];
|
|
|
|
BOOL DllMain(HANDLE hDll, DWORD dwReason, LPVOID lpReserved)
|
|
{
|
|
switch (dwReason)
|
|
{
|
|
case DLL_PROCESS_ATTACH:
|
|
{
|
|
for(int i = 0; i < RESEREVED_TLS; i++)
|
|
{
|
|
tlsIndexes[i] = TlsAlloc();
|
|
if(tlsIndexes[i] == TLS_OUT_OF_INDEXES)
|
|
{
|
|
fprintf(stderr, "Failed to allocate tls index number %d\n", i);
|
|
return FALSE;
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
case DLL_THREAD_ATTACH:
|
|
{
|
|
for(int i = 0; i < RESEREVED_TLS; i++)
|
|
{
|
|
bool res = TlsSetValue(tlsIndexes[i], reinterpret_cast<LPVOID>(i));
|
|
if(res == FALSE)
|
|
{
|
|
fprintf(stderr, "Failed to set tls index number %d\n", i);
|
|
return FALSE;
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
case DLL_THREAD_DETACH:
|
|
{
|
|
for(int i = 0; i < RESEREVED_TLS; i++)
|
|
{
|
|
int val = reinterpret_cast<int>(TlsGetValue(tlsIndexes[i]));
|
|
if(val != i)
|
|
{
|
|
fprintf(stderr, "Failed to get tls index number %d\n", i);
|
|
return FALSE;
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
case DLL_PROCESS_DETACH:
|
|
{
|
|
for(int i = 0; i < RESEREVED_TLS; i++)
|
|
{
|
|
BOOL res = TlsFree(tlsIndexes[i]);
|
|
if(res == FALSE)
|
|
{
|
|
fprintf(stderr, "Failed to free tls index number %d\n", i);
|
|
return FALSE;
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
default:
|
|
{
|
|
break;
|
|
}
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
extern "C" __declspec(dllexport) void Nothing() {}
|