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.
........
This commit is contained in:
Mark Hammond 2009-01-27 23:46:57 +00:00
parent 4fcc4cf185
commit 9844a1ffc3
2 changed files with 76 additions and 2 deletions

View file

@ -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);