xref: /reactos/dll/win32/wuapi/searcher.c (revision f6f20487)
1 /*
2  * IUpdateSearcher implementation
3  *
4  * Copyright 2008 Hans Leidekker
5  *
6  * This library is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU Lesser General Public
8  * License as published by the Free Software Foundation; either
9  * version 2.1 of the License, or (at your option) any later version.
10  *
11  * This library is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14  * Lesser General Public License for more details.
15  *
16  * You should have received a copy of the GNU Lesser General Public
17  * License along with this library; if not, write to the Free Software
18  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
19  */
20 
21 #define WIN32_NO_STATUS
22 #define _INC_WINDOWS
23 
24 #define COBJMACROS
25 
26 #include <config.h>
27 #include <stdarg.h>
28 
29 #include <windef.h>
30 #include <winbase.h>
31 //#include "winuser.h"
32 #include <ole2.h>
33 #include <wuapi.h>
34 
35 #include <wine/debug.h>
36 
37 WINE_DEFAULT_DEBUG_CHANNEL(wuapi);
38 
39 typedef struct _update_searcher
40 {
41     IUpdateSearcher IUpdateSearcher_iface;
42     LONG refs;
43 } update_searcher;
44 
45 static inline update_searcher *impl_from_IUpdateSearcher( IUpdateSearcher *iface )
46 {
47     return CONTAINING_RECORD(iface, update_searcher, IUpdateSearcher_iface);
48 }
49 
50 static ULONG WINAPI update_searcher_AddRef(
51     IUpdateSearcher *iface )
52 {
53     update_searcher *update_searcher = impl_from_IUpdateSearcher( iface );
54     return InterlockedIncrement( &update_searcher->refs );
55 }
56 
57 static ULONG WINAPI update_searcher_Release(
58     IUpdateSearcher *iface )
59 {
60     update_searcher *update_searcher = impl_from_IUpdateSearcher( iface );
61     LONG refs = InterlockedDecrement( &update_searcher->refs );
62     if (!refs)
63     {
64         TRACE("destroying %p\n", update_searcher);
65         HeapFree( GetProcessHeap(), 0, update_searcher );
66     }
67     return refs;
68 }
69 
70 static HRESULT WINAPI update_searcher_QueryInterface(
71     IUpdateSearcher *iface,
72     REFIID riid,
73     void **ppvObject )
74 {
75     update_searcher *This = impl_from_IUpdateSearcher( iface );
76 
77     TRACE("%p %s %p\n", This, debugstr_guid( riid ), ppvObject );
78 
79     if ( IsEqualGUID( riid, &IID_IUpdateSearcher ) ||
80          IsEqualGUID( riid, &IID_IDispatch ) ||
81          IsEqualGUID( riid, &IID_IUnknown ) )
82     {
83         *ppvObject = iface;
84     }
85     else
86     {
87         FIXME("interface %s not implemented\n", debugstr_guid(riid));
88         return E_NOINTERFACE;
89     }
90     IUpdateSearcher_AddRef( iface );
91     return S_OK;
92 }
93 
94 static HRESULT WINAPI update_searcher_GetTypeInfoCount(
95     IUpdateSearcher *iface,
96     UINT *pctinfo )
97 {
98     FIXME("\n");
99     return E_NOTIMPL;
100 }
101 
102 static HRESULT WINAPI update_searcher_GetTypeInfo(
103     IUpdateSearcher *iface,
104     UINT iTInfo,
105     LCID lcid,
106     ITypeInfo **ppTInfo )
107 {
108     FIXME("\n");
109     return E_NOTIMPL;
110 }
111 
112 static HRESULT WINAPI update_searcher_GetIDsOfNames(
113     IUpdateSearcher *iface,
114     REFIID riid,
115     LPOLESTR *rgszNames,
116     UINT cNames,
117     LCID lcid,
118     DISPID *rgDispId )
119 {
120     FIXME("\n");
121     return E_NOTIMPL;
122 }
123 
124 static HRESULT WINAPI update_searcher_Invoke(
125     IUpdateSearcher *iface,
126     DISPID dispIdMember,
127     REFIID riid,
128     LCID lcid,
129     WORD wFlags,
130     DISPPARAMS *pDispParams,
131     VARIANT *pVarResult,
132     EXCEPINFO *pExcepInfo,
133     UINT *puArgErr )
134 {
135     FIXME("\n");
136     return E_NOTIMPL;
137 }
138 
139 static HRESULT WINAPI update_searcher_get_CanAutomaticallyUpgradeService(
140     IUpdateSearcher *This,
141     VARIANT_BOOL *retval )
142 {
143     FIXME("\n");
144     return E_NOTIMPL;
145 }
146 
147 static HRESULT WINAPI update_searcher_put_CanAutomaticallyUpgradeService(
148     IUpdateSearcher *This,
149     VARIANT_BOOL value )
150 {
151     FIXME("%p, %d\n", This, value);
152     return S_OK;
153 }
154 
155 static HRESULT WINAPI update_searcher_get_ClientApplicationID(
156     IUpdateSearcher *This,
157     BSTR *retval )
158 {
159     FIXME("\n");
160     return E_NOTIMPL;
161 }
162 
163 static HRESULT WINAPI update_searcher_put_ClientApplicationID(
164     IUpdateSearcher *This,
165     BSTR value )
166 {
167     FIXME("%p, %s\n", This, debugstr_w(value));
168     return E_NOTIMPL;
169 }
170 
171 static HRESULT WINAPI update_searcher_get_IncludePotentiallySupersededUpdates(
172     IUpdateSearcher *This,
173     VARIANT_BOOL *retval )
174 {
175     FIXME("\n");
176     return E_NOTIMPL;
177 }
178 
179 static HRESULT WINAPI update_searcher_put_IncludePotentiallySupersededUpdates(
180     IUpdateSearcher *This,
181     VARIANT_BOOL value )
182 {
183     FIXME("\n");
184     return E_NOTIMPL;
185 }
186 
187 static HRESULT WINAPI update_searcher_get_ServerSelection(
188     IUpdateSearcher *This,
189     ServerSelection *retval )
190 {
191     FIXME("\n");
192     return E_NOTIMPL;
193 }
194 
195 static HRESULT WINAPI update_searcher_put_ServerSelection(
196     IUpdateSearcher *This,
197     ServerSelection value )
198 {
199     FIXME("\n");
200     return E_NOTIMPL;
201 }
202 
203 static HRESULT WINAPI update_searcher_BeginSearch(
204     IUpdateSearcher *This,
205     BSTR criteria,
206     IUnknown *onCompleted,
207     VARIANT state,
208     ISearchJob **retval )
209 {
210     FIXME("\n");
211     return E_NOTIMPL;
212 }
213 
214 static HRESULT WINAPI update_searcher_EndSearch(
215     IUpdateSearcher *This,
216     ISearchJob *searchJob,
217     ISearchResult **retval )
218 {
219     FIXME("\n");
220     return E_NOTIMPL;
221 }
222 
223 static HRESULT WINAPI update_searcher_EscapeString(
224     IUpdateSearcher *This,
225     BSTR unescaped,
226     BSTR *retval )
227 {
228     FIXME("\n");
229     return E_NOTIMPL;
230 }
231 
232 static HRESULT WINAPI update_searcher_QueryHistory(
233     IUpdateSearcher *This,
234     LONG startIndex,
235     LONG count,
236     IUpdateHistoryEntryCollection **retval )
237 {
238     FIXME("\n");
239     return E_NOTIMPL;
240 }
241 
242 static HRESULT WINAPI update_searcher_Search(
243     IUpdateSearcher *This,
244     BSTR criteria,
245     ISearchResult **retval )
246 {
247     FIXME("\n");
248     return E_NOTIMPL;
249 }
250 
251 static HRESULT WINAPI update_searcher_get_Online(
252     IUpdateSearcher *This,
253     VARIANT_BOOL *retval )
254 {
255     FIXME("\n");
256     return E_NOTIMPL;
257 }
258 
259 static HRESULT WINAPI update_searcher_put_Online(
260     IUpdateSearcher *This,
261     VARIANT_BOOL value )
262 {
263     FIXME("\n");
264     return E_NOTIMPL;
265 }
266 
267 static HRESULT WINAPI update_searcher_GetTotalHistoryCount(
268     IUpdateSearcher *This,
269     LONG *retval )
270 {
271     FIXME("\n");
272     return E_NOTIMPL;
273 }
274 
275 static HRESULT WINAPI update_searcher_get_ServiceID(
276     IUpdateSearcher *This,
277     BSTR *retval )
278 {
279     FIXME("\n");
280     return E_NOTIMPL;
281 }
282 
283 static HRESULT WINAPI update_searcher_put_ServiceID(
284     IUpdateSearcher *This,
285     BSTR value )
286 {
287     FIXME("\n");
288     return E_NOTIMPL;
289 }
290 
291 static const struct IUpdateSearcherVtbl update_searcher_vtbl =
292 {
293     update_searcher_QueryInterface,
294     update_searcher_AddRef,
295     update_searcher_Release,
296     update_searcher_GetTypeInfoCount,
297     update_searcher_GetTypeInfo,
298     update_searcher_GetIDsOfNames,
299     update_searcher_Invoke,
300     update_searcher_get_CanAutomaticallyUpgradeService,
301     update_searcher_put_CanAutomaticallyUpgradeService,
302     update_searcher_get_ClientApplicationID,
303     update_searcher_put_ClientApplicationID,
304     update_searcher_get_IncludePotentiallySupersededUpdates,
305     update_searcher_put_IncludePotentiallySupersededUpdates,
306     update_searcher_get_ServerSelection,
307     update_searcher_put_ServerSelection,
308     update_searcher_BeginSearch,
309     update_searcher_EndSearch,
310     update_searcher_EscapeString,
311     update_searcher_QueryHistory,
312     update_searcher_Search,
313     update_searcher_get_Online,
314     update_searcher_put_Online,
315     update_searcher_GetTotalHistoryCount,
316     update_searcher_get_ServiceID,
317     update_searcher_put_ServiceID
318 };
319 
320 HRESULT UpdateSearcher_create( IUnknown *pUnkOuter, LPVOID *ppObj )
321 {
322     update_searcher *searcher;
323 
324     TRACE("(%p,%p)\n", pUnkOuter, ppObj);
325 
326     searcher = HeapAlloc( GetProcessHeap(), 0, sizeof(*searcher) );
327     if (!searcher) return E_OUTOFMEMORY;
328 
329     searcher->IUpdateSearcher_iface.lpVtbl = &update_searcher_vtbl;
330     searcher->refs = 1;
331 
332     *ppObj = &searcher->IUpdateSearcher_iface;
333 
334     TRACE("returning iface %p\n", *ppObj);
335     return S_OK;
336 }
337