MCPcopy Create free account
hub / github.com/LegacyUpdate/LegacyUpdate / IsolationAwareStart

Function IsolationAwareStart

LegacyUpdate/Compat.cpp:51–85  ·  view source on GitHub ↗

Handling for SxS contexts (mainly for comctl 6.0)

Source from the content-addressed store, hash-verified

49
50// Handling for SxS contexts (mainly for comctl 6.0)
51void IsolationAwareStart(ULONG_PTR *cookie) {
52 *cookie = 0;
53
54 if (!actCtxLoaded) {
55 actCtxLoaded = TRUE;
56 HMODULE kernel32 = GetModuleHandle(L"kernel32.dll");
57 $CreateActCtx = (_CreateActCtxW)GetProcAddress(kernel32, "CreateActCtxW");
58 $ActivateActCtx = (_ActivateActCtx)GetProcAddress(kernel32, "ActivateActCtx");
59 $DeactivateActCtx = (_DeactivateActCtx)GetProcAddress(kernel32, "DeactivateActCtx");
60 $ReleaseActCtx = (_ReleaseActCtx)GetProcAddress(kernel32, "ReleaseActCtx");
61 $GetCurrentActCtx = (_GetCurrentActCtx)GetProcAddress(kernel32, "GetCurrentActCtx");
62 }
63
64 if (!$CreateActCtx || !$ActivateActCtx || !$ReleaseActCtx) {
65 return;
66 }
67
68 // Borrowing the manifest from shell32.dll
69 WCHAR shell32[MAX_PATH];
70 GetModuleFileName(GetModuleHandle(L"shell32.dll"), shell32, ARRAYSIZE(shell32));
71
72 ACTCTX actCtx = {0};
73 actCtx.cbSize = sizeof(actCtx);
74 actCtx.dwFlags = ACTCTX_FLAG_RESOURCE_NAME_VALID;
75 actCtx.lpSource = shell32;
76 actCtx.lpResourceName = MAKEINTRESOURCE(124);
77
78 HANDLE hActCtx = $CreateActCtx(&actCtx);
79 if (hActCtx != INVALID_HANDLE_VALUE) {
80 if (!$ActivateActCtx(hActCtx, cookie)) {
81 $ReleaseActCtx(hActCtx);
82 hActCtx = INVALID_HANDLE_VALUE;
83 }
84 }
85}
86
87void IsolationAwareEnd(ULONG_PTR *cookie) {
88 if (!$DeactivateActCtx || !$GetCurrentActCtx) {

Callers 2

CreateControlWindowMethod · 0.85
put_ValueMethod · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected