#include <tchar.h>
-DWORD openvpnmsica_tlsidx_session = TLS_OUT_OF_INDEXES;
+DWORD openvpnmsica_thread_data_idx = TLS_OUT_OF_INDEXES;
/**
switch (dwReason)
{
case DLL_PROCESS_ATTACH:
- /* Allocate TLS index. */
- openvpnmsica_tlsidx_session = TlsAlloc();
- if (openvpnmsica_tlsidx_session == TLS_OUT_OF_INDEXES)
+ /* Allocate thread local storage index. */
+ openvpnmsica_thread_data_idx = TlsAlloc();
+ if (openvpnmsica_thread_data_idx == TLS_OUT_OF_INDEXES)
{
return FALSE;
}
case DLL_THREAD_ATTACH:
{
- /* Create TLS data. */
- struct openvpnmsica_tls_data *s = (struct openvpnmsica_tls_data *)malloc(sizeof(struct openvpnmsica_tls_data));
- memset(s, 0, sizeof(struct openvpnmsica_tls_data));
- TlsSetValue(openvpnmsica_tlsidx_session, s);
+ /* Create thread local storage data. */
+ struct openvpnmsica_thread_data *s = (struct openvpnmsica_thread_data *)malloc(sizeof(struct openvpnmsica_thread_data));
+ memset(s, 0, sizeof(struct openvpnmsica_thread_data));
+ TlsSetValue(openvpnmsica_thread_data_idx, s);
break;
}
case DLL_PROCESS_DETACH:
- if (openvpnmsica_tlsidx_session != TLS_OUT_OF_INDEXES)
+ if (openvpnmsica_thread_data_idx != TLS_OUT_OF_INDEXES)
{
- /* Free TLS data and TLS index. */
- free(TlsGetValue(openvpnmsica_tlsidx_session));
- TlsFree(openvpnmsica_tlsidx_session);
+ /* Free thread local storage data and index. */
+ free(TlsGetValue(openvpnmsica_thread_data_idx));
+ TlsFree(openvpnmsica_thread_data_idx);
}
break;
case DLL_THREAD_DETACH:
- /* Free TLS data. */
- free(TlsGetValue(openvpnmsica_tlsidx_session));
+ /* Free thread local storage data. */
+ free(TlsGetValue(openvpnmsica_thread_data_idx));
break;
}
/* Secure last error before it is overridden. */
DWORD dwResult = (flags & M_ERRNO) != 0 ? GetLastError() : ERROR_SUCCESS;
- struct openvpnmsica_tls_data *s = (struct openvpnmsica_tls_data *)TlsGetValue(openvpnmsica_tlsidx_session);
+ struct openvpnmsica_thread_data *s = (struct openvpnmsica_thread_data *)TlsGetValue(openvpnmsica_thread_data_idx);
if (s->hInstall == 0)
{
/* No MSI session, no fun. */
BOOL bIsCoInitialized = SUCCEEDED(CoInitialize(NULL));
- /* Set MSI session handle in TLS. */
- struct openvpnmsica_tls_data *s = (struct openvpnmsica_tls_data *)TlsGetValue(openvpnmsica_tlsidx_session);
- s->hInstall = hInstall;
+ OPENVPNMSICA_SAVE_MSI_SESSION(hInstall);
openvpnmsica_set_driver_certification(hInstall);
openvpnmsica_set_openvpnserv_state(hInstall);
UINT uiResult;
BOOL bIsCoInitialized = SUCCEEDED(CoInitialize(NULL));
- /* Set MSI session handle in TLS. */
- struct openvpnmsica_tls_data *s = (struct openvpnmsica_tls_data *)TlsGetValue(openvpnmsica_tlsidx_session);
- s->hInstall = hInstall;
+ OPENVPNMSICA_SAVE_MSI_SESSION(hInstall);
/* Get available network interfaces. */
struct tap_interface_node *pInterfaceList = NULL;
UINT uiResult;
BOOL bIsCoInitialized = SUCCEEDED(CoInitialize(NULL));
- /* Set MSI session handle in TLS. */
- struct openvpnmsica_tls_data *s = (struct openvpnmsica_tls_data *)TlsGetValue(openvpnmsica_tlsidx_session);
- s->hInstall = hInstall;
+ OPENVPNMSICA_SAVE_MSI_SESSION(hInstall);
/* Create and populate a MSI record. */
MSIHANDLE hRecord = MsiCreateRecord(1);
UINT uiResult;
BOOL bIsCoInitialized = SUCCEEDED(CoInitialize(NULL));
- /* Set MSI session handle in TLS. */
- struct openvpnmsica_tls_data *s = (struct openvpnmsica_tls_data *)TlsGetValue(openvpnmsica_tlsidx_session);
- s->hInstall = hInstall;
+ OPENVPNMSICA_SAVE_MSI_SESSION(hInstall);
/* List of deferred custom actions EvaluateTAPInterfaces prepares operation sequence for. */
static const LPCTSTR szActionNames[] =
UINT uiResult;
BOOL bIsCoInitialized = SUCCEEDED(CoInitialize(NULL));
- /* Set MSI session handle in TLS. */
- struct openvpnmsica_tls_data *s = (struct openvpnmsica_tls_data *)TlsGetValue(openvpnmsica_tlsidx_session);
- s->hInstall = hInstall;
+ OPENVPNMSICA_SAVE_MSI_SESSION(hInstall);
BOOL bIsCleanup = MsiGetMode(hInstall, MSIRUNMODE_COMMIT) || MsiGetMode(hInstall, MSIRUNMODE_ROLLBACK);
/**
- * TLS data
+ * Thread local storage data
*/
-struct openvpnmsica_tls_data
+struct openvpnmsica_thread_data
{
MSIHANDLE hInstall; /** Handle to the installation session. */
};
/**
- * MSI session handle TLS index
+ * MSI session handle thread local storage index
*/
-extern DWORD openvpnmsica_tlsidx_session;
+extern DWORD openvpnmsica_thread_data_idx;
+
+
+/**
+ * Set MSI session handle in thread local storage.
+ */
+#define OPENVPNMSICA_SAVE_MSI_SESSION(hInstall) \
+{ \
+ struct openvpnmsica_thread_data *s = (struct openvpnmsica_thread_data *)TlsGetValue(openvpnmsica_thread_data_idx); \
+ s->hInstall = (hInstall); \
+}
/*