@@ -23,68 +23,6 @@ char dllVersionBuffer[16] = ""; // a private buffer
23
23
HMODULE PyWin_DLLhModule = NULL ;
24
24
const char * PyWin_DLLVersionString = dllVersionBuffer ;
25
25
26
- #if HAVE_SXS
27
- // Windows "Activation Context" work.
28
- // Our .pyd extension modules are generally built without a manifest (ie,
29
- // those included with Python and those built with a default distutils.
30
- // This requires we perform some "activation context" magic when loading our
31
- // extensions. In summary:
32
- // * As our DLL loads we save the context being used.
33
- // * Before loading our extensions we re-activate our saved context.
34
- // * After extension load is complete we restore the old context.
35
- // As an added complication, this magic only works on XP or later - we simply
36
- // use the existence (or not) of the relevant function pointers from kernel32.
37
- // See bug 4566 (http://python.org/sf/4566) for more details.
38
- // In Visual Studio 2010, side by side assemblies are no longer used by
39
- // default.
40
-
41
- typedef BOOL (WINAPI * PFN_GETCURRENTACTCTX )(HANDLE * );
42
- typedef BOOL (WINAPI * PFN_ACTIVATEACTCTX )(HANDLE , ULONG_PTR * );
43
- typedef BOOL (WINAPI * PFN_DEACTIVATEACTCTX )(DWORD , ULONG_PTR );
44
- typedef BOOL (WINAPI * PFN_ADDREFACTCTX )(HANDLE );
45
- typedef BOOL (WINAPI * PFN_RELEASEACTCTX )(HANDLE );
46
-
47
- // locals and function pointers for this activation context magic.
48
- static HANDLE PyWin_DLLhActivationContext = NULL ; // one day it might be public
49
- static PFN_GETCURRENTACTCTX pfnGetCurrentActCtx = NULL ;
50
- static PFN_ACTIVATEACTCTX pfnActivateActCtx = NULL ;
51
- static PFN_DEACTIVATEACTCTX pfnDeactivateActCtx = NULL ;
52
- static PFN_ADDREFACTCTX pfnAddRefActCtx = NULL ;
53
- static PFN_RELEASEACTCTX pfnReleaseActCtx = NULL ;
54
-
55
- void _LoadActCtxPointers ()
56
- {
57
- HINSTANCE hKernel32 = GetModuleHandleW (L"kernel32.dll" );
58
- if (hKernel32 )
59
- pfnGetCurrentActCtx = (PFN_GETCURRENTACTCTX ) GetProcAddress (hKernel32 , "GetCurrentActCtx" );
60
- // If we can't load GetCurrentActCtx (ie, pre XP) , don't bother with the rest.
61
- if (pfnGetCurrentActCtx ) {
62
- pfnActivateActCtx = (PFN_ACTIVATEACTCTX ) GetProcAddress (hKernel32 , "ActivateActCtx" );
63
- pfnDeactivateActCtx = (PFN_DEACTIVATEACTCTX ) GetProcAddress (hKernel32 , "DeactivateActCtx" );
64
- pfnAddRefActCtx = (PFN_ADDREFACTCTX ) GetProcAddress (hKernel32 , "AddRefActCtx" );
65
- pfnReleaseActCtx = (PFN_RELEASEACTCTX ) GetProcAddress (hKernel32 , "ReleaseActCtx" );
66
- }
67
- }
68
-
69
- ULONG_PTR _Py_ActivateActCtx ()
70
- {
71
- ULONG_PTR ret = 0 ;
72
- if (PyWin_DLLhActivationContext && pfnActivateActCtx )
73
- if (!(* pfnActivateActCtx )(PyWin_DLLhActivationContext , & ret )) {
74
- OutputDebugString ("Python failed to activate the activation context before loading a DLL\n" );
75
- ret = 0 ; // no promise the failing function didn't change it!
76
- }
77
- return ret ;
78
- }
79
-
80
- void _Py_DeactivateActCtx (ULONG_PTR cookie )
81
- {
82
- if (cookie && pfnDeactivateActCtx )
83
- if (!(* pfnDeactivateActCtx )(0 , cookie ))
84
- OutputDebugString ("Python failed to de-activate the activation context\n" );
85
- }
86
- #endif /* HAVE_SXS */
87
-
88
26
BOOL WINAPI DllMain (HANDLE hInst ,
89
27
ULONG ul_reason_for_call ,
90
28
LPVOID lpReserved )
@@ -98,22 +36,9 @@ BOOL WINAPI DllMain (HANDLE hInst,
98
36
// 1000 is a magic number I picked out of the air. Could do with a #define, I spose...
99
37
LoadString (hInst , 1000 , dllVersionBuffer , sizeof (dllVersionBuffer ));
100
38
#endif
101
-
102
- #if HAVE_SXS
103
- // and capture our activation context for use when loading extensions.
104
- _LoadActCtxPointers ();
105
- if (pfnGetCurrentActCtx && pfnAddRefActCtx )
106
- if ((* pfnGetCurrentActCtx )(& PyWin_DLLhActivationContext ))
107
- if (!(* pfnAddRefActCtx )(PyWin_DLLhActivationContext ))
108
- OutputDebugString ("Python failed to load the default activation context\n" );
109
- #endif
110
39
break ;
111
40
112
41
case DLL_PROCESS_DETACH :
113
- #if HAVE_SXS
114
- if (pfnReleaseActCtx )
115
- (* pfnReleaseActCtx )(PyWin_DLLhActivationContext );
116
- #endif
117
42
break ;
118
43
}
119
44
return TRUE;
0 commit comments