diff options
author | Mark Hammond <mhammond@skippinet.com.au> | 2009-01-27 23:46:57 (GMT) |
---|---|---|
committer | Mark Hammond <mhammond@skippinet.com.au> | 2009-01-27 23:46:57 (GMT) |
commit | 9844a1ffc3645a431ea9198e52214615e7752de7 (patch) | |
tree | 8e724435974089baad36e53369140da387193f69 /Python/dynload_win.c | |
parent | 4fcc4cf1857a7d0a37c39c5df9aed1744bc02cd5 (diff) | |
download | cpython-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.c | 10 |
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); |