1 /* 2 * IUpdateInstaller 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 COBJMACROS 22 23 #include <stdarg.h> 24 25 #include "windef.h" 26 #include "winbase.h" 27 #include "winuser.h" 28 #include "ole2.h" 29 #include "wuapi.h" 30 #include "wuapi_private.h" 31 32 #include "wine/debug.h" 33 34 WINE_DEFAULT_DEBUG_CHANNEL(wuapi); 35 36 typedef struct _update_installer 37 { 38 IUpdateInstaller IUpdateInstaller_iface; 39 LONG refs; 40 } update_installer; 41 42 static inline update_installer *impl_from_IUpdateInstaller( IUpdateInstaller *iface ) 43 { 44 return CONTAINING_RECORD(iface, update_installer, IUpdateInstaller_iface); 45 } 46 47 static ULONG WINAPI update_installer_AddRef( 48 IUpdateInstaller *iface ) 49 { 50 update_installer *update_installer = impl_from_IUpdateInstaller( iface ); 51 return InterlockedIncrement( &update_installer->refs ); 52 } 53 54 static ULONG WINAPI update_installer_Release( 55 IUpdateInstaller *iface ) 56 { 57 update_installer *update_installer = impl_from_IUpdateInstaller( iface ); 58 LONG refs = InterlockedDecrement( &update_installer->refs ); 59 if (!refs) 60 { 61 TRACE("destroying %p\n", update_installer); 62 HeapFree( GetProcessHeap(), 0, update_installer ); 63 } 64 return refs; 65 } 66 67 static HRESULT WINAPI update_installer_QueryInterface( 68 IUpdateInstaller *iface, 69 REFIID riid, 70 void **ppvObject ) 71 { 72 update_installer *This = impl_from_IUpdateInstaller( iface ); 73 74 TRACE("%p %s %p\n", This, debugstr_guid( riid ), ppvObject ); 75 76 if ( IsEqualGUID( riid, &IID_IUpdateInstaller ) || 77 IsEqualGUID( riid, &IID_IDispatch ) || 78 IsEqualGUID( riid, &IID_IUnknown ) ) 79 { 80 *ppvObject = iface; 81 } 82 else 83 { 84 FIXME("interface %s not implemented\n", debugstr_guid(riid)); 85 return E_NOINTERFACE; 86 } 87 IUpdateInstaller_AddRef( iface ); 88 return S_OK; 89 } 90 91 static HRESULT WINAPI update_installer_GetTypeInfoCount( 92 IUpdateInstaller *iface, 93 UINT *pctinfo ) 94 { 95 FIXME("\n"); 96 return E_NOTIMPL; 97 } 98 99 static HRESULT WINAPI update_installer_GetTypeInfo( 100 IUpdateInstaller *iface, 101 UINT iTInfo, 102 LCID lcid, 103 ITypeInfo **ppTInfo ) 104 { 105 FIXME("\n"); 106 return E_NOTIMPL; 107 } 108 109 static HRESULT WINAPI update_installer_GetIDsOfNames( 110 IUpdateInstaller *iface, 111 REFIID riid, 112 LPOLESTR *rgszNames, 113 UINT cNames, 114 LCID lcid, 115 DISPID *rgDispId ) 116 { 117 FIXME("\n"); 118 return E_NOTIMPL; 119 } 120 121 static HRESULT WINAPI update_installer_Invoke( 122 IUpdateInstaller *iface, 123 DISPID dispIdMember, 124 REFIID riid, 125 LCID lcid, 126 WORD wFlags, 127 DISPPARAMS *pDispParams, 128 VARIANT *pVarResult, 129 EXCEPINFO *pExcepInfo, 130 UINT *puArgErr ) 131 { 132 FIXME("\n"); 133 return E_NOTIMPL; 134 } 135 136 static HRESULT WINAPI update_installer_get_ClientApplicationID( 137 IUpdateInstaller *This, 138 BSTR *retval ) 139 { 140 FIXME("\n"); 141 return E_NOTIMPL; 142 } 143 144 static HRESULT WINAPI update_installer_put_ClientApplicationID( 145 IUpdateInstaller *This, 146 BSTR value ) 147 { 148 FIXME("%p, %s\n", This, debugstr_w(value)); 149 return E_NOTIMPL; 150 } 151 152 static HRESULT WINAPI update_installer_get_IsForced( 153 IUpdateInstaller *This, 154 VARIANT_BOOL *retval ) 155 { 156 FIXME("\n"); 157 return E_NOTIMPL; 158 } 159 160 static HRESULT WINAPI update_installer_put_IsForced( 161 IUpdateInstaller *This, 162 VARIANT_BOOL value ) 163 { 164 FIXME("\n"); 165 return E_NOTIMPL; 166 } 167 168 static HRESULT WINAPI update_installer_get_ParentHwnd( 169 IUpdateInstaller *This, 170 HWND *retval ) 171 { 172 FIXME("\n"); 173 return E_NOTIMPL; 174 } 175 176 static HRESULT WINAPI update_installer_put_ParentHwnd( 177 IUpdateInstaller *This, 178 HWND value ) 179 { 180 FIXME("\n"); 181 return E_NOTIMPL; 182 } 183 184 static HRESULT WINAPI update_installer_put_ParentWindow( 185 IUpdateInstaller *This, 186 IUnknown *value ) 187 { 188 FIXME("\n"); 189 return E_NOTIMPL; 190 } 191 192 static HRESULT WINAPI update_installer_get_ParentWindow( 193 IUpdateInstaller *This, 194 IUnknown **retval ) 195 { 196 FIXME("\n"); 197 return E_NOTIMPL; 198 } 199 200 static HRESULT WINAPI update_installer_get_Updates( 201 IUpdateInstaller *This, 202 IUpdateCollection **retval ) 203 { 204 FIXME("\n"); 205 return E_NOTIMPL; 206 } 207 208 static HRESULT WINAPI update_installer_put_Updates( 209 IUpdateInstaller *This, 210 IUpdateCollection *value ) 211 { 212 FIXME("\n"); 213 return E_NOTIMPL; 214 } 215 216 static HRESULT WINAPI update_installer_BeginInstall( 217 IUpdateInstaller *This, 218 IUnknown *onProgressChanged, 219 IUnknown *onCompleted, 220 VARIANT state, 221 IInstallationJob **retval ) 222 { 223 FIXME("\n"); 224 return E_NOTIMPL; 225 } 226 227 static HRESULT WINAPI update_installer_BeginUninstall( 228 IUpdateInstaller *This, 229 IUnknown *onProgressChanged, 230 IUnknown *onCompleted, 231 VARIANT state, 232 IInstallationJob **retval ) 233 { 234 FIXME("\n"); 235 return E_NOTIMPL; 236 } 237 238 static HRESULT WINAPI update_installer_EndInstall( 239 IUpdateInstaller *This, 240 IInstallationJob *value, 241 IInstallationResult **retval ) 242 { 243 FIXME("\n"); 244 return E_NOTIMPL; 245 } 246 247 static HRESULT WINAPI update_installer_EndUninstall( 248 IUpdateInstaller *This, 249 IInstallationJob *value, 250 IInstallationResult **retval ) 251 { 252 FIXME("\n"); 253 return E_NOTIMPL; 254 } 255 256 static HRESULT WINAPI update_installer_Install( 257 IUpdateInstaller *This, 258 IInstallationResult **retval ) 259 { 260 FIXME("\n"); 261 return E_NOTIMPL; 262 } 263 264 static HRESULT WINAPI update_installer_RunWizard( 265 IUpdateInstaller *This, 266 BSTR dialogTitle, 267 IInstallationResult **retval ) 268 { 269 FIXME("\n"); 270 return E_NOTIMPL; 271 } 272 273 static HRESULT WINAPI update_installer_get_IsBusy( 274 IUpdateInstaller *This, 275 VARIANT_BOOL *retval ) 276 { 277 FIXME("\n"); 278 return E_NOTIMPL; 279 } 280 281 static HRESULT WINAPI update_installer_Uninstall( 282 IUpdateInstaller *This, 283 IInstallationResult **retval ) 284 { 285 FIXME("\n"); 286 return E_NOTIMPL; 287 } 288 289 static HRESULT WINAPI update_installer_get_AllowSourcePrompts( 290 IUpdateInstaller *This, 291 VARIANT_BOOL *retval ) 292 { 293 FIXME("\n"); 294 return E_NOTIMPL; 295 } 296 297 static HRESULT WINAPI update_installer_put_AllowSourcePrompts( 298 IUpdateInstaller *This, 299 VARIANT_BOOL value ) 300 { 301 FIXME("\n"); 302 return E_NOTIMPL; 303 } 304 305 static HRESULT WINAPI update_installer_get_RebootRequiredBeforeInstallation( 306 IUpdateInstaller *This, 307 VARIANT_BOOL *retval ) 308 { 309 FIXME("\n"); 310 return E_NOTIMPL; 311 } 312 313 static const struct IUpdateInstallerVtbl update_installer_vtbl = 314 { 315 update_installer_QueryInterface, 316 update_installer_AddRef, 317 update_installer_Release, 318 update_installer_GetTypeInfoCount, 319 update_installer_GetTypeInfo, 320 update_installer_GetIDsOfNames, 321 update_installer_Invoke, 322 update_installer_get_ClientApplicationID, 323 update_installer_put_ClientApplicationID, 324 update_installer_get_IsForced, 325 update_installer_put_IsForced, 326 update_installer_get_ParentHwnd, 327 update_installer_put_ParentHwnd, 328 update_installer_put_ParentWindow, 329 update_installer_get_ParentWindow, 330 update_installer_get_Updates, 331 update_installer_put_Updates, 332 update_installer_BeginInstall, 333 update_installer_BeginUninstall, 334 update_installer_EndInstall, 335 update_installer_EndUninstall, 336 update_installer_Install, 337 update_installer_RunWizard, 338 update_installer_get_IsBusy, 339 update_installer_Uninstall, 340 update_installer_get_AllowSourcePrompts, 341 update_installer_put_AllowSourcePrompts, 342 update_installer_get_RebootRequiredBeforeInstallation 343 }; 344 345 HRESULT UpdateInstaller_create( LPVOID *ppObj ) 346 { 347 update_installer *installer; 348 349 TRACE("(%p)\n", ppObj); 350 351 installer = HeapAlloc( GetProcessHeap(), 0, sizeof(*installer) ); 352 if (!installer) return E_OUTOFMEMORY; 353 354 installer->IUpdateInstaller_iface.lpVtbl = &update_installer_vtbl; 355 installer->refs = 1; 356 357 *ppObj = &installer->IUpdateInstaller_iface; 358 359 TRACE("returning iface %p\n", *ppObj); 360 return S_OK; 361 } 362