@@ -63,19 +63,21 @@ STDAPI DllCanUnloadNow(void)
6363
6464struct REGISTRY_ENTRY
6565{
66- HKEY hkeyRoot;
67- PCWSTR pszKeyName;
68- PCWSTR pszValueName;
69- PCWSTR pszData;
66+ HKEY keyRoot;
67+ LPCWSTR keyName;
68+ LPCWSTR valueName;
69+ DWORD dataType;
70+ DWORD dataSize;
71+ LPCVOID dataPtr;
7072};
7173
72- HRESULT CreateRegKeyAndSetValue (const REGISTRY_ENTRY* pRegistryEntry )
74+ HRESULT CreateRegKeyAndSetValue (const REGISTRY_ENTRY* pEntry )
7375{
7476 HKEY hKey;
75- HRESULT hr = HRESULT_FROM_WIN32 (RegCreateKeyExW (pRegistryEntry-> hkeyRoot , pRegistryEntry-> pszKeyName , 0 , NULL , REG_OPTION_NON_VOLATILE, KEY_SET_VALUE, NULL , &hKey, NULL ));
77+ HRESULT hr = HRESULT_FROM_WIN32 (RegCreateKeyExW (pEntry-> keyRoot , pEntry-> keyName , 0 , NULL , REG_OPTION_NON_VOLATILE, KEY_SET_VALUE, NULL , &hKey, NULL ));
7678 if (SUCCEEDED (hr))
7779 {
78- hr = HRESULT_FROM_WIN32 (RegSetValueExW (hKey, pRegistryEntry-> pszValueName , 0 , REG_SZ , (LPBYTE)pRegistryEntry-> pszData , ((DWORD) wcslen (pRegistryEntry-> pszData ) + 1 ) * sizeof (WCHAR) ));
80+ hr = HRESULT_FROM_WIN32 (RegSetValueExW (hKey, pEntry-> valueName , 0 , pEntry-> dataType , (LPBYTE)pEntry-> dataPtr , pEntry-> dataSize ));
7981 RegCloseKey (hKey);
8082 }
8183 return hr;
@@ -93,13 +95,17 @@ STDAPI DllRegisterServer(void)
9395 }
9496 else
9597 {
98+ DWORD dwTreatment = 1 ; // Picture
99+ DWORD dwModuleNameLen = wcslen (szModuleName) * sizeof (WCHAR);
96100 const REGISTRY_ENTRY rgRegistryEntries[] =
97101 {
98- // RootKey KeyName ValueName Data
99- {HKEY_CURRENT_USER, L" Software\\ Classes\\ CLSID\\ " SZ_CLSID_ShellExtendionHandler, NULL , HANDLER_DESCRIPTION},
100- {HKEY_CURRENT_USER, L" Software\\ Classes\\ CLSID\\ " SZ_CLSID_ShellExtendionHandler L" \\ InProcServer32" , NULL , szModuleName},
101- {HKEY_CURRENT_USER, L" Software\\ Classes\\ CLSID\\ " SZ_CLSID_ShellExtendionHandler L" \\ InProcServer32" , L" ThreadingModel" , L" Apartment" },
102- {HKEY_CURRENT_USER, L" Software\\ Classes\\ " SZ_FORMAT_EXTENSION " \\ ShellEx\\ {e357fccd-a995-4576-b01f-234630154e96}" , NULL , SZ_CLSID_ShellExtendionHandler},
102+ // RootKey KeyName ValueName Type Size, Data
103+ {HKEY_CURRENT_USER, L" Software\\ Classes\\ CLSID\\ " SZ_CLSID_ShellExtendionHandler, NULL , REG_SZ, sizeof (HANDLER_DESCRIPTION), HANDLER_DESCRIPTION},
104+ {HKEY_CURRENT_USER, L" Software\\ Classes\\ CLSID\\ " SZ_CLSID_ShellExtendionHandler L" \\ InProcServer32" , NULL , REG_SZ, dwModuleNameLen, szModuleName},
105+ {HKEY_CURRENT_USER, L" Software\\ Classes\\ CLSID\\ " SZ_CLSID_ShellExtendionHandler L" \\ InProcServer32" , L" ThreadingModel" , REG_SZ, sizeof (L" Apartment" ), L" Apartment" },
106+
107+ {HKEY_CURRENT_USER, L" Software\\ Classes\\ " SZ_FORMAT_EXTENSION, L" Treatment" , REG_DWORD, sizeof (DWORD), &dwTreatment},
108+ {HKEY_CURRENT_USER, L" Software\\ Classes\\ " SZ_FORMAT_EXTENSION " \\ ShellEx\\ {e357fccd-a995-4576-b01f-234630154e96}" , NULL , REG_SZ, sizeof (SZ_CLSID_ShellExtendionHandler), SZ_CLSID_ShellExtendionHandler},
103109 };
104110
105111 hr = S_OK;
@@ -122,7 +128,7 @@ STDAPI DllUnregisterServer(void)
122128 const PCWSTR rgpszKeys[] =
123129 {
124130 L" Software\\ Classes\\ CLSID\\ " SZ_CLSID_ShellExtendionHandler,
125- L" Software\\ Classes\\ " SZ_FORMAT_EXTENSION " \\ ShellEx\\ {e357fccd-a995-4576-b01f-234630154e96}"
131+ L" Software\\ Classes\\ " SZ_FORMAT_EXTENSION " \\ ShellEx\\ {e357fccd-a995-4576-b01f-234630154e96}" ,
126132 };
127133
128134 for (int i = 0 ; i < ARRAYSIZE (rgpszKeys) && SUCCEEDED (hr); i++)
0 commit comments