mirror of
git://source.winehq.org/git/wine.git
synced 2024-10-31 12:54:13 +00:00
ddraw: Prevent ddraw from being unloaded.
This commit is contained in:
parent
194ee40e07
commit
f95f466060
1 changed files with 11 additions and 0 deletions
|
@ -812,6 +812,7 @@ DllMain(HINSTANCE hInstDLL,
|
|||
TRACE("(%p,%x,%p)\n", hInstDLL, Reason, lpv);
|
||||
if (Reason == DLL_PROCESS_ATTACH)
|
||||
{
|
||||
static HMODULE ddraw_self;
|
||||
char buffer[MAX_PATH+10];
|
||||
DWORD size = sizeof(buffer);
|
||||
HKEY hkey = 0;
|
||||
|
@ -911,6 +912,16 @@ DllMain(HINSTANCE hInstDLL,
|
|||
RegCloseKey( hkey );
|
||||
}
|
||||
|
||||
/* Prevent the ddraw module from being unloaded. When switching to
|
||||
* exclusive mode, we replace the window proc of the ddraw window. If
|
||||
* an application would unload ddraw from the WM_DESTROY handler for
|
||||
* that window, it would return to unmapped memory and die. Apparently
|
||||
* this is supposed to work on Windows. We should probably use
|
||||
* GET_MODULE_HANDLE_EX_FLAG_PIN for this, but that's not currently
|
||||
* implemented. */
|
||||
if (!GetModuleHandleExW(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS, (const WCHAR *)&ddraw_self, &ddraw_self))
|
||||
ERR("Failed to get own module handle.\n");
|
||||
|
||||
instance = hInstDLL;
|
||||
DisableThreadLibraryCalls(hInstDLL);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue