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

Function UpdateRegistration

LegacyUpdate/dllmain.cpp:97–202  ·  view source on GitHub ↗

Shared register/unregister method

Source from the content-addressed store, hash-verified

95
96// Shared register/unregister method
97STDAPI UpdateRegistration(BOOL state) {
98 HRESULT hr = OleInitialize(NULL);
99 BOOL oleInitialized = SUCCEEDED(hr);
100 if (hr != RPC_E_CHANGED_MODE && hr != CO_E_ALREADYINITIALIZED) {
101 CHECK_HR_OR_RETURN(L"OleInitialize");
102 }
103
104 LPWSTR installPath = NULL, filename = NULL, libid = NULL;
105 hr = GetInstallPath(&installPath);
106 CHECK_HR_OR_GOTO_END(L"GetInstallPath");
107
108 hr = GetOwnFileName(&filename);
109 CHECK_HR_OR_GOTO_END(L"GetOwnFileName");
110
111 // Register type library
112 if (state) {
113 CComPtr<ITypeLib> typeLib;
114 hr = LoadTypeLib(filename, &typeLib);
115 CHECK_HR_OR_GOTO_END(L"LoadTypeLib");
116
117 hr = RegisterTypeLib(typeLib, filename, NULL);
118 CHECK_HR_OR_GOTO_END(L"RegisterTypeLib");
119 } else {
120 CComPtr<ITypeLib> typeLib;
121 hr = LoadRegTypeLib(LIBID_LegacyUpdateLib, 1, 0, LOCALE_NEUTRAL, &typeLib);
122 if (hr != TYPE_E_LIBNOTREGISTERED) {
123 CHECK_HR_OR_GOTO_END(L"LoadRegTypeLib");
124
125 TLIBATTR *attrs;
126 hr = typeLib->GetLibAttr(&attrs);
127 CHECK_HR_OR_GOTO_END(L"GetLibAttr");
128
129 hr = UnRegisterTypeLib(attrs->guid, attrs->wMajorVerNum, attrs->wMinorVerNum, attrs->lcid, attrs->syskind);
130 typeLib->ReleaseTLibAttr(attrs);
131 CHECK_HR_OR_GOTO_END(L"UnRegisterTypeLib");
132 }
133 }
134
135 // Set vars used for expansions
136 hr = StringFromCLSID(LIBID_LegacyUpdateLib, &libid);
137 CHECK_HR_OR_GOTO_END(L"StringFromCLSID");
138
139 SetEnvironmentVariable(L"APPID", APPID_LegacyUpdateLib);
140 SetEnvironmentVariable(L"LIBID", libid);
141 SetEnvironmentVariable(L"MODULE", filename);
142 SetEnvironmentVariable(L"INSTALLPATH", installPath);
143
144 CoTaskMemFree(libid);
145
146 // Main
147 if (state) {
148 RegistryEntry entries[] = {
149 {HKEY_CLASSES_ROOT, L"AppID\\%APPID%", NULL, REG_SZ, (LPVOID)L"Legacy Update Control"},
150 {HKEY_CLASSES_ROOT, L"AppID\\%APPID%", L"DllSurrogate", REG_SZ, (LPVOID)L""},
151 {HKEY_CLASSES_ROOT, L"AppID\\LegacyUpdate.dll", L"AppID", REG_SZ, (LPVOID)L"%APPID%"},
152 {}
153 };
154 hr = SetRegistryEntries(entries);

Callers 2

DllRegisterServerFunction · 0.85
DllUnregisterServerFunction · 0.85

Calls 3

GetInstallPathFunction · 0.85
GetOwnFileNameFunction · 0.85
SetRegistryEntriesFunction · 0.85

Tested by

no test coverage detected