[PATCH 3/7] rundll32: Activate context at ID 123 before calling library functions.
Zhiyi Zhang
zzhang at codeweavers.com
Wed Apr 13 02:49:11 CDT 2022
This is required to enable common control v6 for library functions called by rundll32.exe.
Signed-off-by: Zhiyi Zhang <zzhang at codeweavers.com>
---
programs/rundll32/rundll32.c | 25 +++++++++++++++++++++++--
1 file changed, 23 insertions(+), 2 deletions(-)
diff --git a/programs/rundll32/rundll32.c b/programs/rundll32/rundll32.c
index fe9d17f0f48..deae5d664c3 100644
--- a/programs/rundll32/rundll32.c
+++ b/programs/rundll32/rundll32.c
@@ -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 );
@@ -363,6 +381,9 @@ int WINAPI wWinMain(HINSTANCE instance, HINSTANCE hOldInstance, LPWSTR szCmdLine
}
CLEANUP:
+ if (activated)
+ DeactivateActCtx(0, cookie);
+ ReleaseActCtx(hCtx);
if (hWnd)
DestroyWindow(hWnd);
if (hDll)
--
2.32.0
More information about the wine-devel
mailing list