diff options
| author | Mark Hammond <mhammond@skippinet.com.au> | 2009-01-27 23:30:15 (GMT) | 
|---|---|---|
| committer | Mark Hammond <mhammond@skippinet.com.au> | 2009-01-27 23:30:15 (GMT) | 
| commit | a942cc0e77a0415a80da381ed7a22c5c6b4158bf (patch) | |
| tree | 734f8dc983f11492b22e14740dc19524ca9b02a8 /Python/dynload_win.c | |
| parent | 8c0cee814fc0c4527ad39dc430802c331a804760 (diff) | |
| download | cpython-a942cc0e77a0415a80da381ed7a22c5c6b4158bf.zip cpython-a942cc0e77a0415a80da381ed7a22c5c6b4158bf.tar.gz cpython-a942cc0e77a0415a80da381ed7a22c5c6b4158bf.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 7c71d9c..907a5a3 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);  | 
