diff --git a/if1632/thunk.c b/if1632/thunk.c index ac1b888a4dbf14b533d743021255ec7c4fc9e268..6a371c28b9d1e5e348ec03f385a84061776d53ae 100644 --- a/if1632/thunk.c +++ b/if1632/thunk.c @@ -525,7 +525,15 @@ BOOL16 WINAPI THUNK_SetDCHook( HDC16 hdc, FARPROC16 proc, DWORD dwHookData ) THUNK *thunk, *oldThunk; if (!defDCHookProc) /* Get DCHook Win16 entry point */ - defDCHookProc = NE_GetEntryPoint( GetModuleHandle16("USER"), 362 ); + { + HMODULE16 hModule = GetModuleHandle16( "USER" ); + NE_MODULE *pModule = NE_GetPtr( hModule ); + + if ( pModule && (pModule->flags & NE_FFLAGS_BUILTIN) ) + defDCHookProc = NE_GetEntryPoint( hModule, 362 ); + else + defDCHookProc = (FARPROC16)-1; + } if (proc != defDCHookProc) { @@ -553,8 +561,11 @@ DWORD WINAPI THUNK_GetDCHook( HDC16 hdc, FARPROC16 *phookProc ) { if (thunk == (THUNK *)DCHook16) { + /* Note: we can only get here when running built-in USER */ + if (!defDCHookProc) /* Get DCHook Win16 entry point */ defDCHookProc = NE_GetEntryPoint(GetModuleHandle16("USER"),362); + *phookProc = defDCHookProc; } else *phookProc = thunk->proc;