[RUNDLL32] -Load and activate the manifest of the hosted dll before loading the library.

svn path=/trunk/; revision=73799
This commit is contained in:
Giannis Adamopoulos 2017-02-14 09:47:13 +00:00
parent c2c30fe940
commit 18d52d4336

View file

@ -346,6 +346,11 @@ int WINAPI _tWinMain(
int i;
size_t nStrLen;
ACTCTXW ActCtx = {sizeof(ACTCTX), ACTCTX_FLAG_RESOURCE_NAME_VALID};
HANDLE hActCtx;
ULONG_PTR cookie;
BOOL bActivated;
// Get command-line in argc-argv format
argv = CommandLineToArgv(GetCommandLine(),&argc);
@ -381,6 +386,11 @@ int WINAPI _tWinMain(
else
lptCmdLine = _T("");
ActCtx.lpSource = lptDllName;
ActCtx.lpResourceName = (LPCWSTR)123;
hActCtx = CreateActCtx(&ActCtx);
bActivated = (hActCtx != INVALID_HANDLE_VALUE ? ActivateActCtx(hActCtx, &cookie) : FALSE);
// Everything is all setup, so load the dll now
hDll = LoadLibrary(lptDllName);
if (hDll) {
@ -429,6 +439,8 @@ int WINAPI _tWinMain(
if (!RegisterBlankClass(hInstance, hPrevInstance))
{
FreeLibrary(hDll);
if (bActivated)
DeactivateActCtx(0, cookie);
return 0;
}
// Create a window so we can pass a window handle to
@ -476,6 +488,9 @@ int WINAPI _tWinMain(
free(lptMsgBuffer);
}
if (bActivated)
DeactivateActCtx(0, cookie);
if (argv) free(argv);
return 0; /* rundll32 always returns 0! */
}