server: Report a default DACL for registry keys.
[wine] / dlls / ieframe / shelluihelper.c
1 /*
2  * Copyright 2012 Jacek Caban for CodeWeavers
3  *
4  * This library is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU Lesser General Public
6  * License as published by the Free Software Foundation; either
7  * version 2.1 of the License, or (at your option) any later version.
8  *
9  * This library is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12  * Lesser General Public License for more details.
13  *
14  * You should have received a copy of the GNU Lesser General Public
15  * License along with this library; if not, write to the Free Software
16  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
17  */
18
19 #include "ieframe.h"
20
21 #include "wine/debug.h"
22
23 WINE_DEFAULT_DEBUG_CHANNEL(ieframe);
24
25 struct ShellUIHelper {
26     IShellUIHelper2 IShellUIHelper2_iface;
27     LONG ref;
28 };
29
30 static inline ShellUIHelper *impl_from_IShellUIHelper2(IShellUIHelper2 *iface)
31 {
32     return CONTAINING_RECORD(iface, ShellUIHelper, IShellUIHelper2_iface);
33 }
34
35 static HRESULT WINAPI ShellUIHelper2_QueryInterface(IShellUIHelper2 *iface, REFIID riid, void **ppv)
36 {
37     ShellUIHelper *This = impl_from_IShellUIHelper2(iface);
38
39     if(IsEqualGUID(&IID_IUnknown, riid)) {
40         TRACE("(%p)->(IID_IUnknown %p)\n", This, ppv);
41         *ppv = &This->IShellUIHelper2_iface;
42     }else if(IsEqualGUID(&IID_IDispatch, riid)) {
43         TRACE("(%p)->(IID_IDispatch %p)\n", This, ppv);
44         *ppv = &This->IShellUIHelper2_iface;
45     }else if(IsEqualGUID(&IID_IShellUIHelper, riid)) {
46         TRACE("(%p)->(IID_IShellUIHelper %p)\n", This, ppv);
47         *ppv = &This->IShellUIHelper2_iface;
48     }else if(IsEqualGUID(&IID_IShellUIHelper, riid)) {
49         TRACE("(%p)->(IID_IShellUIHelper2 %p)\n", This, ppv);
50         *ppv = &This->IShellUIHelper2_iface;
51     }else {
52         WARN("(%p)->(%s %p)\n", This, debugstr_guid(riid), ppv);
53         *ppv = NULL;
54         return E_NOINTERFACE;
55     }
56
57     IUnknown_AddRef((IUnknown*)*ppv);
58     return S_OK;
59 }
60
61 static ULONG WINAPI ShellUIHelper2_AddRef(IShellUIHelper2 *iface)
62 {
63     ShellUIHelper *This = impl_from_IShellUIHelper2(iface);
64     LONG ref = InterlockedIncrement(&This->ref);
65
66     TRACE("(%p) ref=%d\n", This, ref);
67
68     return ref;
69 }
70
71 static ULONG WINAPI ShellUIHelper2_Release(IShellUIHelper2 *iface)
72 {
73     ShellUIHelper *This = impl_from_IShellUIHelper2(iface);
74     LONG ref = InterlockedDecrement(&This->ref);
75
76     TRACE("(%p) ref=%d\n", This, ref);
77
78     if(!ref)
79         heap_free(This);
80
81     return ref;
82 }
83
84 static HRESULT WINAPI ShellUIHelper2_GetTypeInfoCount(IShellUIHelper2 *iface, UINT *pctinfo)
85 {
86     ShellUIHelper *This = impl_from_IShellUIHelper2(iface);
87
88     TRACE("(%p)->(%p)\n", This, pctinfo);
89
90     *pctinfo = 1;
91     return S_OK;
92 }
93
94 static HRESULT WINAPI ShellUIHelper2_GetTypeInfo(IShellUIHelper2 *iface, UINT iTInfo, LCID lcid, LPTYPEINFO *ppTInfo)
95 {
96     ShellUIHelper *This = impl_from_IShellUIHelper2(iface);
97     FIXME("(%p)->(%d %d %p)\n", This, iTInfo, lcid, ppTInfo);
98     return E_NOTIMPL;
99 }
100
101 static HRESULT WINAPI ShellUIHelper2_GetIDsOfNames(IShellUIHelper2 *iface, REFIID riid, LPOLESTR *rgszNames, UINT cNames,
102         LCID lcid, DISPID *rgDispId)
103 {
104     ShellUIHelper *This = impl_from_IShellUIHelper2(iface);
105     FIXME("(%p)->(%s %p %d %d %p)\n", This, debugstr_guid(riid), rgszNames, cNames,
106           lcid, rgDispId);
107     return E_NOTIMPL;
108 }
109
110 static HRESULT WINAPI ShellUIHelper2_Invoke(IShellUIHelper2 *iface, DISPID dispIdMember,
111         REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult,
112         EXCEPINFO *pExepInfo, UINT *puArgErr)
113 {
114     ShellUIHelper *This = impl_from_IShellUIHelper2(iface);
115     FIXME("(%p)->(%d %s %d %08x %p %p %p %p)\n", This, dispIdMember, debugstr_guid(riid),
116           lcid, wFlags, pDispParams, pVarResult, pExepInfo, puArgErr);
117     return E_NOTIMPL;
118 }
119
120 static HRESULT WINAPI ShellUIHelper2_ResetFirstBootMode(IShellUIHelper2 *iface)
121 {
122     ShellUIHelper *This = impl_from_IShellUIHelper2(iface);
123     FIXME("(%p)->()\n", This);
124     return E_NOTIMPL;
125 }
126
127 static HRESULT WINAPI ShellUIHelper2_ResetSafeMode(IShellUIHelper2 *iface)
128 {
129     ShellUIHelper *This = impl_from_IShellUIHelper2(iface);
130     FIXME("(%p)->()\n", This);
131     return E_NOTIMPL;
132 }
133
134 static HRESULT WINAPI ShellUIHelper2_RefreshOfflineDesktop(IShellUIHelper2 *iface)
135 {
136     ShellUIHelper *This = impl_from_IShellUIHelper2(iface);
137     FIXME("(%p)->()\n", This);
138     return E_NOTIMPL;
139 }
140
141 static HRESULT WINAPI ShellUIHelper2_AddFavourite(IShellUIHelper2 *iface, BSTR URL, VARIANT *Title)
142 {
143     ShellUIHelper *This = impl_from_IShellUIHelper2(iface);
144     FIXME("(%p)->(%s %s)\n", This, debugstr_w(URL), debugstr_variant(Title));
145     return E_NOTIMPL;
146 }
147
148 static HRESULT WINAPI ShellUIHelper2_AddChannel(IShellUIHelper2 *iface, BSTR URL)
149 {
150     ShellUIHelper *This = impl_from_IShellUIHelper2(iface);
151     FIXME("(%p)->(%s)\n", This, debugstr_w(URL));
152     return E_NOTIMPL;
153 }
154
155 static HRESULT WINAPI ShellUIHelper2_AddDesktopComponent(IShellUIHelper2 *iface, BSTR URL, BSTR Type,
156         VARIANT *Left, VARIANT *Top, VARIANT *Width, VARIANT *Height)
157 {
158     ShellUIHelper *This = impl_from_IShellUIHelper2(iface);
159     FIXME("(%p)->(%s %s %s %s %s %s)\n", This, debugstr_w(URL), debugstr_w(Type), debugstr_variant(Left),
160           debugstr_variant(Top), debugstr_variant(Width), debugstr_variant(Height));
161     return E_NOTIMPL;
162 }
163
164 static HRESULT WINAPI ShellUIHelper2_IsSubscribed(IShellUIHelper2 *iface, BSTR URL, VARIANT_BOOL *pBool)
165 {
166     ShellUIHelper *This = impl_from_IShellUIHelper2(iface);
167     FIXME("(%p)->(%s %p)\n", This, debugstr_w(URL), pBool);
168     return E_NOTIMPL;
169 }
170
171 static HRESULT WINAPI ShellUIHelper2_NavigateAndFind(IShellUIHelper2 *iface, BSTR URL, BSTR strQuery, VARIANT *varTargetFrame)
172 {
173     ShellUIHelper *This = impl_from_IShellUIHelper2(iface);
174     FIXME("(%p)->(%s %s %s)\n", This, debugstr_w(URL), debugstr_w(strQuery), debugstr_variant(varTargetFrame));
175     return E_NOTIMPL;
176 }
177
178 static HRESULT WINAPI ShellUIHelper2_ImportExportFavourites(IShellUIHelper2 *iface, VARIANT_BOOL fImport, BSTR strImpExpPath)
179 {
180     ShellUIHelper *This = impl_from_IShellUIHelper2(iface);
181     FIXME("(%p)->(%x %s)\n", This, fImport, debugstr_w(strImpExpPath));
182     return E_NOTIMPL;
183 }
184
185 static HRESULT WINAPI ShellUIHelper2_AutoCompleteSaveForm(IShellUIHelper2 *iface, VARIANT *Form)
186 {
187     ShellUIHelper *This = impl_from_IShellUIHelper2(iface);
188     FIXME("(%p)->(%s)\n", This, debugstr_variant(Form));
189     return E_NOTIMPL;
190 }
191
192 static HRESULT WINAPI ShellUIHelper2_AutoScan(IShellUIHelper2 *iface, BSTR strSearch, BSTR strFailureUrl, VARIANT *pvarTargetFrame)
193 {
194     ShellUIHelper *This = impl_from_IShellUIHelper2(iface);
195     FIXME("(%p)->(%s %s %s)\n", This, debugstr_w(strSearch), debugstr_w(strFailureUrl), debugstr_variant(pvarTargetFrame));
196     return E_NOTIMPL;
197 }
198
199 static HRESULT WINAPI ShellUIHelper2_AutoCompleteAttach(IShellUIHelper2 *iface, VARIANT *Reserved)
200 {
201     ShellUIHelper *This = impl_from_IShellUIHelper2(iface);
202     FIXME("(%p)->(%s)\n", This, debugstr_variant(Reserved));
203     return E_NOTIMPL;
204 }
205
206 static HRESULT WINAPI ShellUIHelper2_ShowBrowserUI(IShellUIHelper2 *iface, BSTR bstrName, VARIANT *pvarIn, VARIANT *pvarOut)
207 {
208     ShellUIHelper *This = impl_from_IShellUIHelper2(iface);
209     FIXME("(%p)->(%s %s %p)\n", This, debugstr_w(bstrName), debugstr_variant(pvarIn), pvarOut);
210     return E_NOTIMPL;
211 }
212
213 static HRESULT WINAPI ShellUIHelper2_AddSearchProvider(IShellUIHelper2 *iface, BSTR URL)
214 {
215     ShellUIHelper *This = impl_from_IShellUIHelper2(iface);
216     FIXME("(%p)->(%s)\n", This, debugstr_w(URL));
217     return E_NOTIMPL;
218 }
219
220 static HRESULT WINAPI ShellUIHelper2_RunOnceShown(IShellUIHelper2 *iface)
221 {
222     ShellUIHelper *This = impl_from_IShellUIHelper2(iface);
223     FIXME("(%p)->()\n", This);
224     return E_NOTIMPL;
225 }
226
227 static HRESULT WINAPI ShellUIHelper2_SkipRunOnce(IShellUIHelper2 *iface)
228 {
229     ShellUIHelper *This = impl_from_IShellUIHelper2(iface);
230     FIXME("(%p)->()\n", This);
231     return E_NOTIMPL;
232 }
233
234 static HRESULT WINAPI ShellUIHelper2_CustomizeSettings(IShellUIHelper2 *iface, VARIANT_BOOL fSQM,
235         VARIANT_BOOL fPhishing, BSTR bstrLocale)
236 {
237     ShellUIHelper *This = impl_from_IShellUIHelper2(iface);
238     FIXME("(%p)->(%x %x %s)\n", This, fSQM, fPhishing, debugstr_w(bstrLocale));
239     return E_NOTIMPL;
240 }
241
242 static HRESULT WINAPI ShellUIHelper2_SqmEnabled(IShellUIHelper2 *iface, VARIANT_BOOL *pfEnabled)
243 {
244     ShellUIHelper *This = impl_from_IShellUIHelper2(iface);
245     FIXME("(%p)->(%p)\n", This, pfEnabled);
246     return E_NOTIMPL;
247 }
248
249 static HRESULT WINAPI ShellUIHelper2_PhishingEnabled(IShellUIHelper2 *iface, VARIANT_BOOL *pfEnabled)
250 {
251     ShellUIHelper *This = impl_from_IShellUIHelper2(iface);
252     FIXME("(%p)->(%p)\n", This, pfEnabled);
253     return E_NOTIMPL;
254 }
255
256 static HRESULT WINAPI ShellUIHelper2_BrandImageUri(IShellUIHelper2 *iface, BSTR *pbstrUri)
257 {
258     ShellUIHelper *This = impl_from_IShellUIHelper2(iface);
259     FIXME("(%p)->(%p)\n", This, pbstrUri);
260     return E_NOTIMPL;
261 }
262
263 static HRESULT WINAPI ShellUIHelper2_SkipTabsWelcome(IShellUIHelper2 *iface)
264 {
265     ShellUIHelper *This = impl_from_IShellUIHelper2(iface);
266     FIXME("(%p)->()\n", This);
267     return E_NOTIMPL;
268 }
269
270 static HRESULT WINAPI ShellUIHelper2_DiagnoseConnection(IShellUIHelper2 *iface)
271 {
272     ShellUIHelper *This = impl_from_IShellUIHelper2(iface);
273     FIXME("(%p)->()\n", This);
274     return E_NOTIMPL;
275 }
276
277 static HRESULT WINAPI ShellUIHelper2_CustomizeClearType(IShellUIHelper2 *iface, VARIANT_BOOL fSet)
278 {
279     ShellUIHelper *This = impl_from_IShellUIHelper2(iface);
280     FIXME("(%p)->(%x)\n", This, fSet);
281     return E_NOTIMPL;
282 }
283
284 static HRESULT WINAPI ShellUIHelper2_IsSearchProviderInstalled(IShellUIHelper2 *iface, BSTR URL, DWORD *pdwResult)
285 {
286     ShellUIHelper *This = impl_from_IShellUIHelper2(iface);
287     FIXME("(%p)->(%s %p)\n", This, debugstr_w(URL), pdwResult);
288     return E_NOTIMPL;
289 }
290
291 static HRESULT WINAPI ShellUIHelper2_IsSearchMigrated(IShellUIHelper2 *iface, VARIANT_BOOL *pfMigrated)
292 {
293     ShellUIHelper *This = impl_from_IShellUIHelper2(iface);
294     FIXME("(%p)->(%p)\n", This, pfMigrated);
295     return E_NOTIMPL;
296 }
297
298 static HRESULT WINAPI ShellUIHelper2_DefaultSearchProvider(IShellUIHelper2 *iface, BSTR *pbstrName)
299 {
300     ShellUIHelper *This = impl_from_IShellUIHelper2(iface);
301     FIXME("(%p)->(%p)\n", This, pbstrName);
302     return E_NOTIMPL;
303 }
304
305 static HRESULT WINAPI ShellUIHelper2_RunOnceRequiredSettingsComplete(IShellUIHelper2 *iface, VARIANT_BOOL fComplete)
306 {
307     ShellUIHelper *This = impl_from_IShellUIHelper2(iface);
308     FIXME("(%p)->(%x)\n", This, fComplete);
309     return E_NOTIMPL;
310 }
311
312 static HRESULT WINAPI ShellUIHelper2_RunOnceHasShown(IShellUIHelper2 *iface, VARIANT_BOOL *pfShown)
313 {
314     ShellUIHelper *This = impl_from_IShellUIHelper2(iface);
315     FIXME("(%p)->(%p)\n", This, pfShown);
316     return E_NOTIMPL;
317 }
318
319 static HRESULT WINAPI ShellUIHelper2_SearchGuideUrl(IShellUIHelper2 *iface, BSTR *pbstrUrl)
320 {
321     ShellUIHelper *This = impl_from_IShellUIHelper2(iface);
322     FIXME("(%p)->(%p)\n", This, pbstrUrl);
323     return E_NOTIMPL;
324 }
325
326 static const IShellUIHelper2Vtbl ShellUIHelper2Vtbl = {
327     ShellUIHelper2_QueryInterface,
328     ShellUIHelper2_AddRef,
329     ShellUIHelper2_Release,
330     ShellUIHelper2_GetTypeInfoCount,
331     ShellUIHelper2_GetTypeInfo,
332     ShellUIHelper2_GetIDsOfNames,
333     ShellUIHelper2_Invoke,
334     ShellUIHelper2_ResetFirstBootMode,
335     ShellUIHelper2_ResetSafeMode,
336     ShellUIHelper2_RefreshOfflineDesktop,
337     ShellUIHelper2_AddFavourite,
338     ShellUIHelper2_AddChannel,
339     ShellUIHelper2_AddDesktopComponent,
340     ShellUIHelper2_IsSubscribed,
341     ShellUIHelper2_NavigateAndFind,
342     ShellUIHelper2_ImportExportFavourites,
343     ShellUIHelper2_AutoCompleteSaveForm,
344     ShellUIHelper2_AutoScan,
345     ShellUIHelper2_AutoCompleteAttach,
346     ShellUIHelper2_ShowBrowserUI,
347     ShellUIHelper2_AddSearchProvider,
348     ShellUIHelper2_RunOnceShown,
349     ShellUIHelper2_SkipRunOnce,
350     ShellUIHelper2_CustomizeSettings,
351     ShellUIHelper2_SqmEnabled,
352     ShellUIHelper2_PhishingEnabled,
353     ShellUIHelper2_BrandImageUri,
354     ShellUIHelper2_SkipTabsWelcome,
355     ShellUIHelper2_DiagnoseConnection,
356     ShellUIHelper2_CustomizeClearType,
357     ShellUIHelper2_IsSearchProviderInstalled,
358     ShellUIHelper2_IsSearchMigrated,
359     ShellUIHelper2_DefaultSearchProvider,
360     ShellUIHelper2_RunOnceRequiredSettingsComplete,
361     ShellUIHelper2_RunOnceHasShown,
362     ShellUIHelper2_SearchGuideUrl
363 };
364
365 HRESULT create_shell_ui_helper(IShellUIHelper2 **_ret)
366 {
367     ShellUIHelper *ret;
368
369     ret = heap_alloc(sizeof(*ret));
370     if(!ret)
371         return E_OUTOFMEMORY;
372
373     ret->IShellUIHelper2_iface.lpVtbl = &ShellUIHelper2Vtbl;
374     ret->ref = 1;
375
376     *_ret = &ret->IShellUIHelper2_iface;
377     return S_OK;
378 }