summaryrefslogtreecommitdiffstats
path: root/Python/dynload_win.c
diff options
context:
space:
mode:
authorMark Hammond <mhammond@skippinet.com.au>2009-01-27 23:46:57 (GMT)
committerMark Hammond <mhammond@skippinet.com.au>2009-01-27 23:46:57 (GMT)
commit9844a1ffc3645a431ea9198e52214615e7752de7 (patch)
tree8e724435974089baad36e53369140da387193f69 /Python/dynload_win.c
parent4fcc4cf1857a7d0a37c39c5df9aed1744bc02cd5 (diff)
downloadcpython-9844a1ffc3645a431ea9198e52214615e7752de7.zip
cpython-9844a1ffc3645a431ea9198e52214615e7752de7.tar.gz
cpython-9844a1ffc3645a431ea9198e52214615e7752de7.tar.bz2
Merged revisions 69038 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk ........ r69038 | mark.hammond | 2009-01-28 10:12:23 +1100 (Wed, 28 Jan 2009) | 3 lines On Windows, use the Python 'Activation Context' when loading extensions to avoid problems loading the CRT from a private assembly. Via bug 4566. ........
Diffstat (limited to 'Python/dynload_win.c')
-rw-r--r--Python/dynload_win.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/Python/dynload_win.c b/Python/dynload_win.c
index 2f46037..61c5664 100644
--- a/Python/dynload_win.c
+++ b/Python/dynload_win.c
@@ -11,6 +11,10 @@
#include "importdl.h"
#include <windows.h>
+// "activation context" magic - see dl_nt.c...
+extern ULONG_PTR _Py_ActivateActCtx();
+void _Py_DeactivateActCtx(ULONG_PTR cookie);
+
const struct filedescr _PyImport_DynLoadFiletab[] = {
#ifdef _DEBUG
{"_d.pyd", "rb", C_EXTENSION},
@@ -172,6 +176,7 @@ dl_funcptr _PyImport_GetDynLoadFunc(const char *fqname, const char *shortname,
char pathbuf[260];
LPTSTR dummy;
unsigned int old_mode;
+ ULONG_PTR cookie = 0;
/* We use LoadLibraryEx so Windows looks for dependent DLLs
in directory of pathname first. However, Windows95
can sometimes not work correctly unless the absolute
@@ -184,10 +189,13 @@ dl_funcptr _PyImport_GetDynLoadFunc(const char *fqname, const char *shortname,
if (GetFullPathName(pathname,
sizeof(pathbuf),
pathbuf,
- &dummy))
+ &dummy)) {
+ ULONG_PTR cookie = _Py_ActivateActCtx();
/* XXX This call doesn't exist in Windows CE */
hDLL = LoadLibraryEx(pathname, NULL,
LOAD_WITH_ALTERED_SEARCH_PATH);
+ _Py_DeactivateActCtx(cookie);
+ }
/* restore old error mode settings */
SetErrorMode(old_mode);