Commit d1d91288 authored by Zhiyi Zhang's avatar Zhiyi Zhang Committed by Alexandre Julliard

rundll32: Activate context at ID 123 before calling library functions.

This is required to enable common control v6 for library functions called by rundll32.exe. Signed-off-by: 's avatarZhiyi Zhang <zzhang@codeweavers.com> Signed-off-by: 's avatarAlexandre Julliard <julliard@winehq.org>
parent 765d4c1e
......@@ -276,9 +276,12 @@ int WINAPI wWinMain(HINSTANCE instance, HINSTANCE hOldInstance, LPWSTR szCmdLine
HWND hWnd;
LPWSTR szDllName,szEntryPoint;
void *entry_point = NULL;
BOOL unicode = FALSE, win16 = FALSE;
BOOL unicode = FALSE, win16 = FALSE, activated = FALSE;
HMODULE hDll, hCtx = INVALID_HANDLE_VALUE;
WCHAR path[MAX_PATH];
STARTUPINFOW info;
HMODULE hDll;
ULONG_PTR cookie;
ACTCTXW ctx;
hWnd=NULL;
hDll=NULL;
......@@ -301,6 +304,21 @@ int WINAPI wWinMain(HINSTANCE instance, HINSTANCE hOldInstance, LPWSTR szCmdLine
szEntryPoint = get_next_arg(&szCmdLine);
WINE_TRACE("EntryPoint=%s\n",wine_dbgstr_w(szEntryPoint));
/* Activate context before DllMain() is called */
if (SearchPathW(NULL, szDllName, NULL, ARRAY_SIZE(path), path, NULL))
{
memset(&ctx, 0, sizeof(ctx));
ctx.cbSize = sizeof(ctx);
ctx.lpSource = path;
ctx.lpResourceName = MAKEINTRESOURCEW(123);
ctx.dwFlags = ACTCTX_FLAG_RESOURCE_NAME_VALID;
hCtx = CreateActCtxW(&ctx);
if (hCtx != INVALID_HANDLE_VALUE)
activated = ActivateActCtx(hCtx, &cookie);
else
WINE_TRACE("No manifest at ID 123 in %s\n", wine_dbgstr_w(path));
}
/* Load the library */
hDll=LoadLibraryW(szDllName);
if (hDll) entry_point = get_entry_point32( hDll, szEntryPoint, &unicode );
......@@ -367,6 +385,9 @@ CLEANUP:
DestroyWindow(hWnd);
if (hDll)
FreeLibrary(hDll);
if (activated)
DeactivateActCtx(0, cookie);
ReleaseActCtx(hCtx);
HeapFree(GetProcessHeap(),0,szDllName);
return 0; /* rundll32 always returns 0! */
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment