headers: Update to wine master

Signed-off-by: Liu Hao <lh_mouse@126.com>
diff --git a/mingw-w64-headers/Makefile.in b/mingw-w64-headers/Makefile.in
index 7de8694..99d85e6 100644
--- a/mingw-w64-headers/Makefile.in
+++ b/mingw-w64-headers/Makefile.in
@@ -563,6 +563,7 @@
 @HAVE_WIDL_TRUE@  include/wmdrmsdk.idl \
 @HAVE_WIDL_TRUE@  include/wpcapi.idl \
 @HAVE_WIDL_TRUE@  include/wtypes.idl \
+@HAVE_WIDL_TRUE@  include/wuapi.idl \
 @HAVE_WIDL_TRUE@  include/xapo.idl \
 @HAVE_WIDL_TRUE@  include/xaudio2.idl \
 @HAVE_WIDL_TRUE@  include/xaudio2fx.idl \
diff --git a/mingw-w64-headers/include/windows.foundation.collections.h b/mingw-w64-headers/include/windows.foundation.collections.h
index a51dd0a..591bf1f 100644
--- a/mingw-w64-headers/include/windows.foundation.collections.h
+++ b/mingw-w64-headers/include/windows.foundation.collections.h
@@ -249,7 +249,7 @@
                     virtual HRESULT STDMETHODCALLTYPE get_Current(T_abi *value) = 0;
                     virtual HRESULT STDMETHODCALLTYPE get_HasCurrent(WINBOOL *value) = 0;
                     virtual HRESULT STDMETHODCALLTYPE MoveNext(WINBOOL *value) = 0;
-                    virtual HRESULT STDMETHODCALLTYPE GetMany(UINT32 count,T_abi *items,UINT32 *value) = 0;
+                    virtual HRESULT STDMETHODCALLTYPE GetMany(UINT32 count,UINT32 items_size,T_abi *items,UINT32 *value) = 0;
                 };
             }
         }
@@ -295,10 +295,10 @@
                     typedef typename Windows::Foundation::Internal::GetLogicalType<T>::type T_logical;
                 public:
                     typedef T T_complex;
-                    virtual HRESULT STDMETHODCALLTYPE GetAt(ULONG index,T_abi *value) = 0;
-                    virtual HRESULT STDMETHODCALLTYPE get_Size(ULONG *value) = 0;
-                    virtual HRESULT STDMETHODCALLTYPE IndexOf(T_abi element,ULONG *index,BOOLEAN *value) = 0;
-                    virtual HRESULT STDMETHODCALLTYPE GetMany(ULONG start_index,T_abi *items,ULONG *value) = 0;
+                    virtual HRESULT STDMETHODCALLTYPE GetAt(UINT32 index,T_abi *value) = 0;
+                    virtual HRESULT STDMETHODCALLTYPE get_Size(UINT32 *value) = 0;
+                    virtual HRESULT STDMETHODCALLTYPE IndexOf(T_abi element,UINT32 *index,BOOLEAN *value) = 0;
+                    virtual HRESULT STDMETHODCALLTYPE GetMany(UINT32 start_index,UINT32 items_size,T_abi *items,UINT32 *value) = 0;
                 };
             }
         }
diff --git a/mingw-w64-headers/include/windows.foundation.collections.idl b/mingw-w64-headers/include/windows.foundation.collections.idl
index 50a678e..b0b9430 100644
--- a/mingw-w64-headers/include/windows.foundation.collections.idl
+++ b/mingw-w64-headers/include/windows.foundation.collections.idl
@@ -83,7 +83,7 @@
                 [propget] HRESULT Current([out, retval] T *value);
                 [propget] HRESULT HasCurrent([out, retval] BOOL *value);
                 HRESULT MoveNext([out, retval] BOOL *value);
-                HRESULT GetMany([in] UINT32 count, [out] T *items, [out, retval] UINT32 *value);
+                HRESULT GetMany([in] UINT32 count, [in] UINT32 items_size, [out] T *items, [out, retval] UINT32 *value);
             }
 
             [
@@ -101,10 +101,10 @@
             ]
             interface IVectorView<T> : IInspectable
             {
-                HRESULT GetAt([in] ULONG index, [out, retval] T *value);
-                [propget] HRESULT Size([out, retval] ULONG *value);
-                HRESULT IndexOf([in, optional] T element, [out] ULONG *index, [out, retval] BOOLEAN *value);
-                HRESULT GetMany([in] ULONG start_index, [out] T *items, [out, retval] ULONG *value);
+                HRESULT GetAt([in] UINT32 index, [out, retval] T *value);
+                [propget] HRESULT Size([out, retval] UINT32 *value);
+                HRESULT IndexOf([in, optional] T element, [out] UINT32 *index, [out, retval] BOOLEAN *value);
+                HRESULT GetMany([in] UINT32 start_index, [in] UINT32 items_size, [out] T *items, [out, retval] UINT32 *value);
             }
         }
 #endif
diff --git a/mingw-w64-headers/include/windows.foundation.h b/mingw-w64-headers/include/windows.foundation.h
index 4a2c5b7..95486f9 100644
--- a/mingw-w64-headers/include/windows.foundation.h
+++ b/mingw-w64-headers/include/windows.foundation.h
@@ -49,6 +49,14 @@
 #endif /* __cplusplus */
 #endif
 
+#ifndef ____FIVectorView_1_HSTRING_FWD_DEFINED__
+#define ____FIVectorView_1_HSTRING_FWD_DEFINED__
+typedef interface __FIVectorView_1_HSTRING __FIVectorView_1_HSTRING;
+#ifdef __cplusplus
+#define __FIVectorView_1_HSTRING ABI::Windows::Foundation::Collections::IVectorView<HSTRING >
+#endif /* __cplusplus */
+#endif
+
 /* Headers for imported files */
 
 #include <inspectable.h>
@@ -422,6 +430,14 @@
 #endif /* __cplusplus */
 #endif
 
+#ifndef ____FIVectorView_1_HSTRING_FWD_DEFINED__
+#define ____FIVectorView_1_HSTRING_FWD_DEFINED__
+typedef interface __FIVectorView_1_HSTRING __FIVectorView_1_HSTRING;
+#ifdef __cplusplus
+#define __FIVectorView_1_HSTRING ABI::Windows::Foundation::Collections::IVectorView<HSTRING >
+#endif /* __cplusplus */
+#endif
+
 /*****************************************************************************
  * IAsyncOperationCompletedHandler<boolean > interface
  */
@@ -654,6 +670,163 @@
 
 #endif  /* ____FIAsyncOperation_1_boolean_INTERFACE_DEFINED__ */
 
+/*****************************************************************************
+ * IVectorView<HSTRING > interface
+ */
+#ifndef ____FIVectorView_1_HSTRING_INTERFACE_DEFINED__
+#define ____FIVectorView_1_HSTRING_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID___FIVectorView_1_HSTRING, 0xfca5679c, 0xbfd4, 0x5187, 0x8b,0x2d, 0xde,0x22,0x50,0x49,0xb3,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace Foundation {
+            namespace Collections {
+                template<>
+                MIDL_INTERFACE("fca5679c-bfd4-5187-8b2d-de225049b346")
+                IVectorView<HSTRING > : IVectorView_impl<HSTRING >
+                {
+                };
+            }
+        }
+    }
+}
+extern "C" {
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(__FIVectorView_1_HSTRING, 0xfca5679c, 0xbfd4, 0x5187, 0x8b,0x2d, 0xde,0x22,0x50,0x49,0xb3,0x46)
+#endif
+#else
+typedef struct __FIVectorView_1_HSTRINGVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        __FIVectorView_1_HSTRING *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        __FIVectorView_1_HSTRING *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        __FIVectorView_1_HSTRING *This);
+
+    /*** IInspectable methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetIids)(
+        __FIVectorView_1_HSTRING *This,
+        ULONG *iidCount,
+        IID **iids);
+
+    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
+        __FIVectorView_1_HSTRING *This,
+        HSTRING *className);
+
+    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
+        __FIVectorView_1_HSTRING *This,
+        TrustLevel *trustLevel);
+
+    /*** IVectorView<HSTRING > methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetAt)(
+        __FIVectorView_1_HSTRING *This,
+        UINT32 index,
+        HSTRING *value);
+
+    HRESULT (STDMETHODCALLTYPE *get_Size)(
+        __FIVectorView_1_HSTRING *This,
+        UINT32 *value);
+
+    HRESULT (STDMETHODCALLTYPE *IndexOf)(
+        __FIVectorView_1_HSTRING *This,
+        HSTRING element,
+        UINT32 *index,
+        BOOLEAN *value);
+
+    HRESULT (STDMETHODCALLTYPE *GetMany)(
+        __FIVectorView_1_HSTRING *This,
+        UINT32 start_index,
+        UINT32 items_size,
+        HSTRING *items,
+        UINT32 *value);
+
+    END_INTERFACE
+} __FIVectorView_1_HSTRINGVtbl;
+
+interface __FIVectorView_1_HSTRING {
+    CONST_VTBL __FIVectorView_1_HSTRINGVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define __FIVectorView_1_HSTRING_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __FIVectorView_1_HSTRING_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __FIVectorView_1_HSTRING_Release(This) (This)->lpVtbl->Release(This)
+/*** IInspectable methods ***/
+#define __FIVectorView_1_HSTRING_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
+#define __FIVectorView_1_HSTRING_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
+#define __FIVectorView_1_HSTRING_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
+/*** IVectorView<HSTRING > methods ***/
+#define __FIVectorView_1_HSTRING_GetAt(This,index,value) (This)->lpVtbl->GetAt(This,index,value)
+#define __FIVectorView_1_HSTRING_get_Size(This,value) (This)->lpVtbl->get_Size(This,value)
+#define __FIVectorView_1_HSTRING_IndexOf(This,element,index,value) (This)->lpVtbl->IndexOf(This,element,index,value)
+#define __FIVectorView_1_HSTRING_GetMany(This,start_index,items_size,items,value) (This)->lpVtbl->GetMany(This,start_index,items_size,items,value)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT __FIVectorView_1_HSTRING_QueryInterface(__FIVectorView_1_HSTRING* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG __FIVectorView_1_HSTRING_AddRef(__FIVectorView_1_HSTRING* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG __FIVectorView_1_HSTRING_Release(__FIVectorView_1_HSTRING* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IInspectable methods ***/
+static FORCEINLINE HRESULT __FIVectorView_1_HSTRING_GetIids(__FIVectorView_1_HSTRING* This,ULONG *iidCount,IID **iids) {
+    return This->lpVtbl->GetIids(This,iidCount,iids);
+}
+static FORCEINLINE HRESULT __FIVectorView_1_HSTRING_GetRuntimeClassName(__FIVectorView_1_HSTRING* This,HSTRING *className) {
+    return This->lpVtbl->GetRuntimeClassName(This,className);
+}
+static FORCEINLINE HRESULT __FIVectorView_1_HSTRING_GetTrustLevel(__FIVectorView_1_HSTRING* This,TrustLevel *trustLevel) {
+    return This->lpVtbl->GetTrustLevel(This,trustLevel);
+}
+/*** IVectorView<HSTRING > methods ***/
+static FORCEINLINE HRESULT __FIVectorView_1_HSTRING_GetAt(__FIVectorView_1_HSTRING* This,UINT32 index,HSTRING *value) {
+    return This->lpVtbl->GetAt(This,index,value);
+}
+static FORCEINLINE HRESULT __FIVectorView_1_HSTRING_get_Size(__FIVectorView_1_HSTRING* This,UINT32 *value) {
+    return This->lpVtbl->get_Size(This,value);
+}
+static FORCEINLINE HRESULT __FIVectorView_1_HSTRING_IndexOf(__FIVectorView_1_HSTRING* This,HSTRING element,UINT32 *index,BOOLEAN *value) {
+    return This->lpVtbl->IndexOf(This,element,index,value);
+}
+static FORCEINLINE HRESULT __FIVectorView_1_HSTRING_GetMany(__FIVectorView_1_HSTRING* This,UINT32 start_index,UINT32 items_size,HSTRING *items,UINT32 *value) {
+    return This->lpVtbl->GetMany(This,start_index,items_size,items,value);
+}
+#endif
+#ifdef WIDL_using_Windows_Foundation_Collections
+#define IID_IVectorView_HSTRING IID___FIVectorView_1_HSTRING
+#define IVectorView_HSTRINGVtbl __FIVectorView_1_HSTRINGVtbl
+#define IVectorView_HSTRING __FIVectorView_1_HSTRING
+#define IVectorView_HSTRING_QueryInterface __FIVectorView_1_HSTRING_QueryInterface
+#define IVectorView_HSTRING_AddRef __FIVectorView_1_HSTRING_AddRef
+#define IVectorView_HSTRING_Release __FIVectorView_1_HSTRING_Release
+#define IVectorView_HSTRING_GetIids __FIVectorView_1_HSTRING_GetIids
+#define IVectorView_HSTRING_GetRuntimeClassName __FIVectorView_1_HSTRING_GetRuntimeClassName
+#define IVectorView_HSTRING_GetTrustLevel __FIVectorView_1_HSTRING_GetTrustLevel
+#define IVectorView_HSTRING_GetAt __FIVectorView_1_HSTRING_GetAt
+#define IVectorView_HSTRING_get_Size __FIVectorView_1_HSTRING_get_Size
+#define IVectorView_HSTRING_IndexOf __FIVectorView_1_HSTRING_IndexOf
+#define IVectorView_HSTRING_GetMany __FIVectorView_1_HSTRING_GetMany
+#endif /* WIDL_using_Windows_Foundation_Collections */
+#endif
+
+#endif
+
+#endif  /* ____FIVectorView_1_HSTRING_INTERFACE_DEFINED__ */
+
 /* Begin additional prototypes for all interfaces */
 
 ULONG           __RPC_USER HSTRING_UserSize     (ULONG *, ULONG, HSTRING *);
diff --git a/mingw-w64-headers/include/windows.foundation.idl b/mingw-w64-headers/include/windows.foundation.idl
index c4dc454..fe09dc6 100644
--- a/mingw-w64-headers/include/windows.foundation.idl
+++ b/mingw-w64-headers/include/windows.foundation.idl
@@ -127,6 +127,7 @@
         declare {
             interface Windows.Foundation.AsyncOperationCompletedHandler<boolean>;
             interface Windows.Foundation.IAsyncOperation<boolean>;
+            interface Windows.Foundation.Collections.IVectorView<HSTRING>;
         }
     }
 }
diff --git a/mingw-w64-headers/include/windows.media.speechsynthesis.h b/mingw-w64-headers/include/windows.media.speechsynthesis.h
index 242c979..51b8b8f 100644
--- a/mingw-w64-headers/include/windows.media.speechsynthesis.h
+++ b/mingw-w64-headers/include/windows.media.speechsynthesis.h
@@ -690,6 +690,7 @@
     HRESULT (STDMETHODCALLTYPE *GetMany)(
         __FIIterator_1_Windows__CMedia__CSpeechSynthesis__CVoiceInformation *This,
         UINT32 count,
+        UINT32 items_size,
         __x_ABI_CWindows_CMedia_CSpeechSynthesis_CIVoiceInformation **items,
         UINT32 *value);
 
@@ -714,7 +715,7 @@
 #define __FIIterator_1_Windows__CMedia__CSpeechSynthesis__CVoiceInformation_get_Current(This,value) (This)->lpVtbl->get_Current(This,value)
 #define __FIIterator_1_Windows__CMedia__CSpeechSynthesis__CVoiceInformation_get_HasCurrent(This,value) (This)->lpVtbl->get_HasCurrent(This,value)
 #define __FIIterator_1_Windows__CMedia__CSpeechSynthesis__CVoiceInformation_MoveNext(This,value) (This)->lpVtbl->MoveNext(This,value)
-#define __FIIterator_1_Windows__CMedia__CSpeechSynthesis__CVoiceInformation_GetMany(This,count,items,value) (This)->lpVtbl->GetMany(This,count,items,value)
+#define __FIIterator_1_Windows__CMedia__CSpeechSynthesis__CVoiceInformation_GetMany(This,count,items_size,items,value) (This)->lpVtbl->GetMany(This,count,items_size,items,value)
 #else
 /*** IUnknown methods ***/
 static FORCEINLINE HRESULT __FIIterator_1_Windows__CMedia__CSpeechSynthesis__CVoiceInformation_QueryInterface(__FIIterator_1_Windows__CMedia__CSpeechSynthesis__CVoiceInformation* This,REFIID riid,void **ppvObject) {
@@ -746,8 +747,8 @@
 static FORCEINLINE HRESULT __FIIterator_1_Windows__CMedia__CSpeechSynthesis__CVoiceInformation_MoveNext(__FIIterator_1_Windows__CMedia__CSpeechSynthesis__CVoiceInformation* This,WINBOOL *value) {
     return This->lpVtbl->MoveNext(This,value);
 }
-static FORCEINLINE HRESULT __FIIterator_1_Windows__CMedia__CSpeechSynthesis__CVoiceInformation_GetMany(__FIIterator_1_Windows__CMedia__CSpeechSynthesis__CVoiceInformation* This,UINT32 count,__x_ABI_CWindows_CMedia_CSpeechSynthesis_CIVoiceInformation **items,UINT32 *value) {
-    return This->lpVtbl->GetMany(This,count,items,value);
+static FORCEINLINE HRESULT __FIIterator_1_Windows__CMedia__CSpeechSynthesis__CVoiceInformation_GetMany(__FIIterator_1_Windows__CMedia__CSpeechSynthesis__CVoiceInformation* This,UINT32 count,UINT32 items_size,__x_ABI_CWindows_CMedia_CSpeechSynthesis_CIVoiceInformation **items,UINT32 *value) {
+    return This->lpVtbl->GetMany(This,count,items_size,items,value);
 }
 #endif
 #ifdef WIDL_using_Windows_Foundation_Collections
@@ -954,24 +955,25 @@
     /*** IVectorView<ABI::Windows::Media::SpeechSynthesis::VoiceInformation* > methods ***/
     HRESULT (STDMETHODCALLTYPE *GetAt)(
         __FIVectorView_1_Windows__CMedia__CSpeechSynthesis__CVoiceInformation *This,
-        ULONG index,
+        UINT32 index,
         __x_ABI_CWindows_CMedia_CSpeechSynthesis_CIVoiceInformation **value);
 
     HRESULT (STDMETHODCALLTYPE *get_Size)(
         __FIVectorView_1_Windows__CMedia__CSpeechSynthesis__CVoiceInformation *This,
-        ULONG *value);
+        UINT32 *value);
 
     HRESULT (STDMETHODCALLTYPE *IndexOf)(
         __FIVectorView_1_Windows__CMedia__CSpeechSynthesis__CVoiceInformation *This,
         __x_ABI_CWindows_CMedia_CSpeechSynthesis_CIVoiceInformation *element,
-        ULONG *index,
+        UINT32 *index,
         BOOLEAN *value);
 
     HRESULT (STDMETHODCALLTYPE *GetMany)(
         __FIVectorView_1_Windows__CMedia__CSpeechSynthesis__CVoiceInformation *This,
-        ULONG start_index,
+        UINT32 start_index,
+        UINT32 items_size,
         __x_ABI_CWindows_CMedia_CSpeechSynthesis_CIVoiceInformation **items,
-        ULONG *value);
+        UINT32 *value);
 
     END_INTERFACE
 } __FIVectorView_1_Windows__CMedia__CSpeechSynthesis__CVoiceInformationVtbl;
@@ -994,7 +996,7 @@
 #define __FIVectorView_1_Windows__CMedia__CSpeechSynthesis__CVoiceInformation_GetAt(This,index,value) (This)->lpVtbl->GetAt(This,index,value)
 #define __FIVectorView_1_Windows__CMedia__CSpeechSynthesis__CVoiceInformation_get_Size(This,value) (This)->lpVtbl->get_Size(This,value)
 #define __FIVectorView_1_Windows__CMedia__CSpeechSynthesis__CVoiceInformation_IndexOf(This,element,index,value) (This)->lpVtbl->IndexOf(This,element,index,value)
-#define __FIVectorView_1_Windows__CMedia__CSpeechSynthesis__CVoiceInformation_GetMany(This,start_index,items,value) (This)->lpVtbl->GetMany(This,start_index,items,value)
+#define __FIVectorView_1_Windows__CMedia__CSpeechSynthesis__CVoiceInformation_GetMany(This,start_index,items_size,items,value) (This)->lpVtbl->GetMany(This,start_index,items_size,items,value)
 #else
 /*** IUnknown methods ***/
 static FORCEINLINE HRESULT __FIVectorView_1_Windows__CMedia__CSpeechSynthesis__CVoiceInformation_QueryInterface(__FIVectorView_1_Windows__CMedia__CSpeechSynthesis__CVoiceInformation* This,REFIID riid,void **ppvObject) {
@@ -1017,17 +1019,17 @@
     return This->lpVtbl->GetTrustLevel(This,trustLevel);
 }
 /*** IVectorView<ABI::Windows::Media::SpeechSynthesis::VoiceInformation* > methods ***/
-static FORCEINLINE HRESULT __FIVectorView_1_Windows__CMedia__CSpeechSynthesis__CVoiceInformation_GetAt(__FIVectorView_1_Windows__CMedia__CSpeechSynthesis__CVoiceInformation* This,ULONG index,__x_ABI_CWindows_CMedia_CSpeechSynthesis_CIVoiceInformation **value) {
+static FORCEINLINE HRESULT __FIVectorView_1_Windows__CMedia__CSpeechSynthesis__CVoiceInformation_GetAt(__FIVectorView_1_Windows__CMedia__CSpeechSynthesis__CVoiceInformation* This,UINT32 index,__x_ABI_CWindows_CMedia_CSpeechSynthesis_CIVoiceInformation **value) {
     return This->lpVtbl->GetAt(This,index,value);
 }
-static FORCEINLINE HRESULT __FIVectorView_1_Windows__CMedia__CSpeechSynthesis__CVoiceInformation_get_Size(__FIVectorView_1_Windows__CMedia__CSpeechSynthesis__CVoiceInformation* This,ULONG *value) {
+static FORCEINLINE HRESULT __FIVectorView_1_Windows__CMedia__CSpeechSynthesis__CVoiceInformation_get_Size(__FIVectorView_1_Windows__CMedia__CSpeechSynthesis__CVoiceInformation* This,UINT32 *value) {
     return This->lpVtbl->get_Size(This,value);
 }
-static FORCEINLINE HRESULT __FIVectorView_1_Windows__CMedia__CSpeechSynthesis__CVoiceInformation_IndexOf(__FIVectorView_1_Windows__CMedia__CSpeechSynthesis__CVoiceInformation* This,__x_ABI_CWindows_CMedia_CSpeechSynthesis_CIVoiceInformation *element,ULONG *index,BOOLEAN *value) {
+static FORCEINLINE HRESULT __FIVectorView_1_Windows__CMedia__CSpeechSynthesis__CVoiceInformation_IndexOf(__FIVectorView_1_Windows__CMedia__CSpeechSynthesis__CVoiceInformation* This,__x_ABI_CWindows_CMedia_CSpeechSynthesis_CIVoiceInformation *element,UINT32 *index,BOOLEAN *value) {
     return This->lpVtbl->IndexOf(This,element,index,value);
 }
-static FORCEINLINE HRESULT __FIVectorView_1_Windows__CMedia__CSpeechSynthesis__CVoiceInformation_GetMany(__FIVectorView_1_Windows__CMedia__CSpeechSynthesis__CVoiceInformation* This,ULONG start_index,__x_ABI_CWindows_CMedia_CSpeechSynthesis_CIVoiceInformation **items,ULONG *value) {
-    return This->lpVtbl->GetMany(This,start_index,items,value);
+static FORCEINLINE HRESULT __FIVectorView_1_Windows__CMedia__CSpeechSynthesis__CVoiceInformation_GetMany(__FIVectorView_1_Windows__CMedia__CSpeechSynthesis__CVoiceInformation* This,UINT32 start_index,UINT32 items_size,__x_ABI_CWindows_CMedia_CSpeechSynthesis_CIVoiceInformation **items,UINT32 *value) {
+    return This->lpVtbl->GetMany(This,start_index,items_size,items,value);
 }
 #endif
 #ifdef WIDL_using_Windows_Foundation_Collections
diff --git a/mingw-w64-headers/include/wuapi.h b/mingw-w64-headers/include/wuapi.h
new file mode 100644
index 0000000..99dd414
--- /dev/null
+++ b/mingw-w64-headers/include/wuapi.h
@@ -0,0 +1,6980 @@
+/*** Autogenerated by WIDL 6.4 from include/wuapi.idl - Do not edit ***/
+
+#ifdef _WIN32
+#ifndef __REQUIRED_RPCNDR_H_VERSION__
+#define __REQUIRED_RPCNDR_H_VERSION__ 475
+#endif
+#include <rpc.h>
+#include <rpcndr.h>
+#endif
+
+#ifndef COM_NO_WINDOWS_H
+#include <windows.h>
+#include <ole2.h>
+#endif
+
+#ifndef __wuapi_h__
+#define __wuapi_h__
+
+/* Forward declarations */
+
+#ifndef __IAutomaticUpdatesSettings_FWD_DEFINED__
+#define __IAutomaticUpdatesSettings_FWD_DEFINED__
+typedef interface IAutomaticUpdatesSettings IAutomaticUpdatesSettings;
+#ifdef __cplusplus
+interface IAutomaticUpdatesSettings;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IAutomaticUpdates_FWD_DEFINED__
+#define __IAutomaticUpdates_FWD_DEFINED__
+typedef interface IAutomaticUpdates IAutomaticUpdates;
+#ifdef __cplusplus
+interface IAutomaticUpdates;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IWebProxy_FWD_DEFINED__
+#define __IWebProxy_FWD_DEFINED__
+typedef interface IWebProxy IWebProxy;
+#ifdef __cplusplus
+interface IWebProxy;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IUpdateSession_FWD_DEFINED__
+#define __IUpdateSession_FWD_DEFINED__
+typedef interface IUpdateSession IUpdateSession;
+#ifdef __cplusplus
+interface IUpdateSession;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IImageInformation_FWD_DEFINED__
+#define __IImageInformation_FWD_DEFINED__
+typedef interface IImageInformation IImageInformation;
+#ifdef __cplusplus
+interface IImageInformation;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __ICategory_FWD_DEFINED__
+#define __ICategory_FWD_DEFINED__
+typedef interface ICategory ICategory;
+#ifdef __cplusplus
+interface ICategory;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __ICategoryCollection_FWD_DEFINED__
+#define __ICategoryCollection_FWD_DEFINED__
+typedef interface ICategoryCollection ICategoryCollection;
+#ifdef __cplusplus
+interface ICategoryCollection;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IStringCollection_FWD_DEFINED__
+#define __IStringCollection_FWD_DEFINED__
+typedef interface IStringCollection IStringCollection;
+#ifdef __cplusplus
+interface IStringCollection;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IUpdateException_FWD_DEFINED__
+#define __IUpdateException_FWD_DEFINED__
+typedef interface IUpdateException IUpdateException;
+#ifdef __cplusplus
+interface IUpdateException;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IUpdateExceptionCollection_FWD_DEFINED__
+#define __IUpdateExceptionCollection_FWD_DEFINED__
+typedef interface IUpdateExceptionCollection IUpdateExceptionCollection;
+#ifdef __cplusplus
+interface IUpdateExceptionCollection;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IUpdateIdentity_FWD_DEFINED__
+#define __IUpdateIdentity_FWD_DEFINED__
+typedef interface IUpdateIdentity IUpdateIdentity;
+#ifdef __cplusplus
+interface IUpdateIdentity;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IInstallationBehavior_FWD_DEFINED__
+#define __IInstallationBehavior_FWD_DEFINED__
+typedef interface IInstallationBehavior IInstallationBehavior;
+#ifdef __cplusplus
+interface IInstallationBehavior;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IUpdateDownloadContent_FWD_DEFINED__
+#define __IUpdateDownloadContent_FWD_DEFINED__
+typedef interface IUpdateDownloadContent IUpdateDownloadContent;
+#ifdef __cplusplus
+interface IUpdateDownloadContent;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IUpdateDownloadContentCollection_FWD_DEFINED__
+#define __IUpdateDownloadContentCollection_FWD_DEFINED__
+typedef interface IUpdateDownloadContentCollection IUpdateDownloadContentCollection;
+#ifdef __cplusplus
+interface IUpdateDownloadContentCollection;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IUpdate_FWD_DEFINED__
+#define __IUpdate_FWD_DEFINED__
+typedef interface IUpdate IUpdate;
+#ifdef __cplusplus
+interface IUpdate;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IUpdateCollection_FWD_DEFINED__
+#define __IUpdateCollection_FWD_DEFINED__
+typedef interface IUpdateCollection IUpdateCollection;
+#ifdef __cplusplus
+interface IUpdateCollection;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __ISearchJob_FWD_DEFINED__
+#define __ISearchJob_FWD_DEFINED__
+typedef interface ISearchJob ISearchJob;
+#ifdef __cplusplus
+interface ISearchJob;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __ISearchResult_FWD_DEFINED__
+#define __ISearchResult_FWD_DEFINED__
+typedef interface ISearchResult ISearchResult;
+#ifdef __cplusplus
+interface ISearchResult;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IUpdateHistoryEntry_FWD_DEFINED__
+#define __IUpdateHistoryEntry_FWD_DEFINED__
+typedef interface IUpdateHistoryEntry IUpdateHistoryEntry;
+#ifdef __cplusplus
+interface IUpdateHistoryEntry;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IUpdateHistoryEntryCollection_FWD_DEFINED__
+#define __IUpdateHistoryEntryCollection_FWD_DEFINED__
+typedef interface IUpdateHistoryEntryCollection IUpdateHistoryEntryCollection;
+#ifdef __cplusplus
+interface IUpdateHistoryEntryCollection;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IUpdateSearcher_FWD_DEFINED__
+#define __IUpdateSearcher_FWD_DEFINED__
+typedef interface IUpdateSearcher IUpdateSearcher;
+#ifdef __cplusplus
+interface IUpdateSearcher;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IUpdateDownloadResult_FWD_DEFINED__
+#define __IUpdateDownloadResult_FWD_DEFINED__
+typedef interface IUpdateDownloadResult IUpdateDownloadResult;
+#ifdef __cplusplus
+interface IUpdateDownloadResult;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IDownloadProgress_FWD_DEFINED__
+#define __IDownloadProgress_FWD_DEFINED__
+typedef interface IDownloadProgress IDownloadProgress;
+#ifdef __cplusplus
+interface IDownloadProgress;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IDownloadJob_FWD_DEFINED__
+#define __IDownloadJob_FWD_DEFINED__
+typedef interface IDownloadJob IDownloadJob;
+#ifdef __cplusplus
+interface IDownloadJob;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IDownloadResult_FWD_DEFINED__
+#define __IDownloadResult_FWD_DEFINED__
+typedef interface IDownloadResult IDownloadResult;
+#ifdef __cplusplus
+interface IDownloadResult;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IUpdateDownloader_FWD_DEFINED__
+#define __IUpdateDownloader_FWD_DEFINED__
+typedef interface IUpdateDownloader IUpdateDownloader;
+#ifdef __cplusplus
+interface IUpdateDownloader;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IUpdateInstallationResult_FWD_DEFINED__
+#define __IUpdateInstallationResult_FWD_DEFINED__
+typedef interface IUpdateInstallationResult IUpdateInstallationResult;
+#ifdef __cplusplus
+interface IUpdateInstallationResult;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IInstallationProgress_FWD_DEFINED__
+#define __IInstallationProgress_FWD_DEFINED__
+typedef interface IInstallationProgress IInstallationProgress;
+#ifdef __cplusplus
+interface IInstallationProgress;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IInstallationJob_FWD_DEFINED__
+#define __IInstallationJob_FWD_DEFINED__
+typedef interface IInstallationJob IInstallationJob;
+#ifdef __cplusplus
+interface IInstallationJob;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IInstallationResult_FWD_DEFINED__
+#define __IInstallationResult_FWD_DEFINED__
+typedef interface IInstallationResult IInstallationResult;
+#ifdef __cplusplus
+interface IInstallationResult;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IUpdateInstaller_FWD_DEFINED__
+#define __IUpdateInstaller_FWD_DEFINED__
+typedef interface IUpdateInstaller IUpdateInstaller;
+#ifdef __cplusplus
+interface IUpdateInstaller;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __ISystemInformation_FWD_DEFINED__
+#define __ISystemInformation_FWD_DEFINED__
+typedef interface ISystemInformation ISystemInformation;
+#ifdef __cplusplus
+interface ISystemInformation;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __AutomaticUpdates_FWD_DEFINED__
+#define __AutomaticUpdates_FWD_DEFINED__
+#ifdef __cplusplus
+typedef class AutomaticUpdates AutomaticUpdates;
+#else
+typedef struct AutomaticUpdates AutomaticUpdates;
+#endif /* defined __cplusplus */
+#endif /* defined __AutomaticUpdates_FWD_DEFINED__ */
+
+#ifndef __UpdateInstaller_FWD_DEFINED__
+#define __UpdateInstaller_FWD_DEFINED__
+#ifdef __cplusplus
+typedef class UpdateInstaller UpdateInstaller;
+#else
+typedef struct UpdateInstaller UpdateInstaller;
+#endif /* defined __cplusplus */
+#endif /* defined __UpdateInstaller_FWD_DEFINED__ */
+
+#ifndef __UpdateSession_FWD_DEFINED__
+#define __UpdateSession_FWD_DEFINED__
+#ifdef __cplusplus
+typedef class UpdateSession UpdateSession;
+#else
+typedef struct UpdateSession UpdateSession;
+#endif /* defined __cplusplus */
+#endif /* defined __UpdateSession_FWD_DEFINED__ */
+
+#ifndef __SystemInformation_FWD_DEFINED__
+#define __SystemInformation_FWD_DEFINED__
+#ifdef __cplusplus
+typedef class SystemInformation SystemInformation;
+#else
+typedef struct SystemInformation SystemInformation;
+#endif /* defined __cplusplus */
+#endif /* defined __SystemInformation_FWD_DEFINED__ */
+
+/* Headers for imported files */
+
+#include <oaidl.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef __WUApiLib_LIBRARY_DEFINED__
+#define __WUApiLib_LIBRARY_DEFINED__
+
+DEFINE_GUID(LIBID_WUApiLib, 0xb596cc9f, 0x56e5, 0x419e, 0xa6,0x22, 0xe0,0x1b,0xb4,0x57,0x43,0x1e);
+
+#ifndef __ICategoryCollection_FWD_DEFINED__
+#define __ICategoryCollection_FWD_DEFINED__
+typedef interface ICategoryCollection ICategoryCollection;
+#ifdef __cplusplus
+interface ICategoryCollection;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IStringCollection_FWD_DEFINED__
+#define __IStringCollection_FWD_DEFINED__
+typedef interface IStringCollection IStringCollection;
+#ifdef __cplusplus
+interface IStringCollection;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IUpdateCollection_FWD_DEFINED__
+#define __IUpdateCollection_FWD_DEFINED__
+typedef interface IUpdateCollection IUpdateCollection;
+#ifdef __cplusplus
+interface IUpdateCollection;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IUpdateDownloader_FWD_DEFINED__
+#define __IUpdateDownloader_FWD_DEFINED__
+typedef interface IUpdateDownloader IUpdateDownloader;
+#ifdef __cplusplus
+interface IUpdateDownloader;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IUpdateInstaller_FWD_DEFINED__
+#define __IUpdateInstaller_FWD_DEFINED__
+typedef interface IUpdateInstaller IUpdateInstaller;
+#ifdef __cplusplus
+interface IUpdateInstaller;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IUpdateSearcher_FWD_DEFINED__
+#define __IUpdateSearcher_FWD_DEFINED__
+typedef interface IUpdateSearcher IUpdateSearcher;
+#ifdef __cplusplus
+interface IUpdateSearcher;
+#endif /* __cplusplus */
+#endif
+
+typedef enum tagDownloadPriority {
+    dpLow = 1,
+    dpNormal = 2,
+    dpHigh = 3
+} DownloadPriority;
+typedef enum tagServerSelection {
+    ssDefault = 0,
+    ssManagedServer = 1,
+    ssWindowsUpdate = 2,
+    ssOthers = 3
+} ServerSelection;
+typedef enum tagAutomaticUpdatesNotificationLevel {
+    aunlNotConfigured = 0,
+    aunlDisabled = 1,
+    aunlNotifyBeforeDownload = 2,
+    aunlNotifyBeforeInstallation = 3,
+    aunlScheduledInstallation = 4
+} AutomaticUpdatesNotificationLevel;
+typedef enum tagAutomaticUpdatesScheduledInstallationDay {
+    ausidEveryDay = 0,
+    ausidEverySunday = 1,
+    ausidEveryMonday = 2,
+    ausidEveryTuesday = 3,
+    ausidEveryWednesday = 4,
+    ausidEveryThursday = 5,
+    ausidEveryFriday = 6,
+    ausidEverySaturday = 7
+} AutomaticUpdatesScheduledInstallationDay;
+typedef enum tagDownloadPhase {
+    dphInitializing = 0,
+    dphDownloading = 1,
+    dphVerifying = 2
+} DownloadPhase;
+typedef enum tagOperationResultCode {
+    orcNotStarted = 0,
+    orcInProgress = 1,
+    orcSucceeded = 2,
+    orcSucceededWithErrors = 3,
+    orcFailed = 4,
+    orcAborted = 5
+} OperationResultCode;
+typedef enum tagUpdateExceptionContext {
+    uecGeneral = 1,
+    uecWindowsDriver = 2,
+    uecWindowsInstaller = 3
+} UpdateExceptionContext;
+typedef enum tagInstallationImpact {
+    iiNormal = 0,
+    iiMinor = 1,
+    iiRequiresExclusiveHandling = 2
+} InstallationImpact;
+typedef enum tagInstallationRebootBehavior {
+    irbNeverReboots = 0,
+    irbAlwaysRequiresReboot = 1,
+    irbCanRequestReboot = 2
+} InstallationRebootBehavior;
+typedef enum tagUpdateType {
+    utSoftware = 1,
+    utDriver = 2
+} UpdateType;
+typedef enum tagUpdateOperation {
+    uoInstallation = 1,
+    uoUninstallation = 2
+} UpdateOperation;
+typedef enum tagDeploymentAction {
+    daNone = 0,
+    daInstallation = 1,
+    daUninstallation = 2,
+    daDetection = 3
+} DeploymentAction;
+/*****************************************************************************
+ * IAutomaticUpdatesSettings interface
+ */
+#ifndef __IAutomaticUpdatesSettings_INTERFACE_DEFINED__
+#define __IAutomaticUpdatesSettings_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IAutomaticUpdatesSettings, 0x2ee48f22, 0xaf3c, 0x405f, 0x89,0x70, 0xf7,0x1b,0xe1,0x2e,0xe9,0xa2);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("2ee48f22-af3c-405f-8970-f71be12ee9a2")
+IAutomaticUpdatesSettings : public IDispatch
+{
+    virtual HRESULT STDMETHODCALLTYPE get_NotificationLevel(
+        AutomaticUpdatesNotificationLevel *retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_NotificationLevel(
+        AutomaticUpdatesNotificationLevel value) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_ReadOnly(
+        VARIANT_BOOL *retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_Required(
+        VARIANT_BOOL *retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_ScheduledInstallationDay(
+        AutomaticUpdatesScheduledInstallationDay *retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_ScheduledInstallationDay(
+        AutomaticUpdatesScheduledInstallationDay value) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_ScheduledInstallationTime(
+        LONG *retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_ScheduledInstallationTime(
+        LONG value) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Refresh(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Save(
+        ) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IAutomaticUpdatesSettings, 0x2ee48f22, 0xaf3c, 0x405f, 0x89,0x70, 0xf7,0x1b,0xe1,0x2e,0xe9,0xa2)
+#endif
+#else
+typedef struct IAutomaticUpdatesSettingsVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IAutomaticUpdatesSettings *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IAutomaticUpdatesSettings *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IAutomaticUpdatesSettings *This);
+
+    /*** IDispatch methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
+        IAutomaticUpdatesSettings *This,
+        UINT *pctinfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
+        IAutomaticUpdatesSettings *This,
+        UINT iTInfo,
+        LCID lcid,
+        ITypeInfo **ppTInfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
+        IAutomaticUpdatesSettings *This,
+        REFIID riid,
+        LPOLESTR *rgszNames,
+        UINT cNames,
+        LCID lcid,
+        DISPID *rgDispId);
+
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        IAutomaticUpdatesSettings *This,
+        DISPID dispIdMember,
+        REFIID riid,
+        LCID lcid,
+        WORD wFlags,
+        DISPPARAMS *pDispParams,
+        VARIANT *pVarResult,
+        EXCEPINFO *pExcepInfo,
+        UINT *puArgErr);
+
+    /*** IAutomaticUpdatesSettings methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_NotificationLevel)(
+        IAutomaticUpdatesSettings *This,
+        AutomaticUpdatesNotificationLevel *retval);
+
+    HRESULT (STDMETHODCALLTYPE *put_NotificationLevel)(
+        IAutomaticUpdatesSettings *This,
+        AutomaticUpdatesNotificationLevel value);
+
+    HRESULT (STDMETHODCALLTYPE *get_ReadOnly)(
+        IAutomaticUpdatesSettings *This,
+        VARIANT_BOOL *retval);
+
+    HRESULT (STDMETHODCALLTYPE *get_Required)(
+        IAutomaticUpdatesSettings *This,
+        VARIANT_BOOL *retval);
+
+    HRESULT (STDMETHODCALLTYPE *get_ScheduledInstallationDay)(
+        IAutomaticUpdatesSettings *This,
+        AutomaticUpdatesScheduledInstallationDay *retval);
+
+    HRESULT (STDMETHODCALLTYPE *put_ScheduledInstallationDay)(
+        IAutomaticUpdatesSettings *This,
+        AutomaticUpdatesScheduledInstallationDay value);
+
+    HRESULT (STDMETHODCALLTYPE *get_ScheduledInstallationTime)(
+        IAutomaticUpdatesSettings *This,
+        LONG *retval);
+
+    HRESULT (STDMETHODCALLTYPE *put_ScheduledInstallationTime)(
+        IAutomaticUpdatesSettings *This,
+        LONG value);
+
+    HRESULT (STDMETHODCALLTYPE *Refresh)(
+        IAutomaticUpdatesSettings *This);
+
+    HRESULT (STDMETHODCALLTYPE *Save)(
+        IAutomaticUpdatesSettings *This);
+
+    END_INTERFACE
+} IAutomaticUpdatesSettingsVtbl;
+
+interface IAutomaticUpdatesSettings {
+    CONST_VTBL IAutomaticUpdatesSettingsVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IAutomaticUpdatesSettings_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IAutomaticUpdatesSettings_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IAutomaticUpdatesSettings_Release(This) (This)->lpVtbl->Release(This)
+/*** IDispatch methods ***/
+#define IAutomaticUpdatesSettings_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
+#define IAutomaticUpdatesSettings_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+#define IAutomaticUpdatesSettings_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+#define IAutomaticUpdatesSettings_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+/*** IAutomaticUpdatesSettings methods ***/
+#define IAutomaticUpdatesSettings_get_NotificationLevel(This,retval) (This)->lpVtbl->get_NotificationLevel(This,retval)
+#define IAutomaticUpdatesSettings_put_NotificationLevel(This,value) (This)->lpVtbl->put_NotificationLevel(This,value)
+#define IAutomaticUpdatesSettings_get_ReadOnly(This,retval) (This)->lpVtbl->get_ReadOnly(This,retval)
+#define IAutomaticUpdatesSettings_get_Required(This,retval) (This)->lpVtbl->get_Required(This,retval)
+#define IAutomaticUpdatesSettings_get_ScheduledInstallationDay(This,retval) (This)->lpVtbl->get_ScheduledInstallationDay(This,retval)
+#define IAutomaticUpdatesSettings_put_ScheduledInstallationDay(This,value) (This)->lpVtbl->put_ScheduledInstallationDay(This,value)
+#define IAutomaticUpdatesSettings_get_ScheduledInstallationTime(This,retval) (This)->lpVtbl->get_ScheduledInstallationTime(This,retval)
+#define IAutomaticUpdatesSettings_put_ScheduledInstallationTime(This,value) (This)->lpVtbl->put_ScheduledInstallationTime(This,value)
+#define IAutomaticUpdatesSettings_Refresh(This) (This)->lpVtbl->Refresh(This)
+#define IAutomaticUpdatesSettings_Save(This) (This)->lpVtbl->Save(This)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IAutomaticUpdatesSettings_QueryInterface(IAutomaticUpdatesSettings* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IAutomaticUpdatesSettings_AddRef(IAutomaticUpdatesSettings* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IAutomaticUpdatesSettings_Release(IAutomaticUpdatesSettings* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDispatch methods ***/
+static FORCEINLINE HRESULT IAutomaticUpdatesSettings_GetTypeInfoCount(IAutomaticUpdatesSettings* This,UINT *pctinfo) {
+    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
+}
+static FORCEINLINE HRESULT IAutomaticUpdatesSettings_GetTypeInfo(IAutomaticUpdatesSettings* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
+    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
+}
+static FORCEINLINE HRESULT IAutomaticUpdatesSettings_GetIDsOfNames(IAutomaticUpdatesSettings* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
+    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
+}
+static FORCEINLINE HRESULT IAutomaticUpdatesSettings_Invoke(IAutomaticUpdatesSettings* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
+    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
+}
+/*** IAutomaticUpdatesSettings methods ***/
+static FORCEINLINE HRESULT IAutomaticUpdatesSettings_get_NotificationLevel(IAutomaticUpdatesSettings* This,AutomaticUpdatesNotificationLevel *retval) {
+    return This->lpVtbl->get_NotificationLevel(This,retval);
+}
+static FORCEINLINE HRESULT IAutomaticUpdatesSettings_put_NotificationLevel(IAutomaticUpdatesSettings* This,AutomaticUpdatesNotificationLevel value) {
+    return This->lpVtbl->put_NotificationLevel(This,value);
+}
+static FORCEINLINE HRESULT IAutomaticUpdatesSettings_get_ReadOnly(IAutomaticUpdatesSettings* This,VARIANT_BOOL *retval) {
+    return This->lpVtbl->get_ReadOnly(This,retval);
+}
+static FORCEINLINE HRESULT IAutomaticUpdatesSettings_get_Required(IAutomaticUpdatesSettings* This,VARIANT_BOOL *retval) {
+    return This->lpVtbl->get_Required(This,retval);
+}
+static FORCEINLINE HRESULT IAutomaticUpdatesSettings_get_ScheduledInstallationDay(IAutomaticUpdatesSettings* This,AutomaticUpdatesScheduledInstallationDay *retval) {
+    return This->lpVtbl->get_ScheduledInstallationDay(This,retval);
+}
+static FORCEINLINE HRESULT IAutomaticUpdatesSettings_put_ScheduledInstallationDay(IAutomaticUpdatesSettings* This,AutomaticUpdatesScheduledInstallationDay value) {
+    return This->lpVtbl->put_ScheduledInstallationDay(This,value);
+}
+static FORCEINLINE HRESULT IAutomaticUpdatesSettings_get_ScheduledInstallationTime(IAutomaticUpdatesSettings* This,LONG *retval) {
+    return This->lpVtbl->get_ScheduledInstallationTime(This,retval);
+}
+static FORCEINLINE HRESULT IAutomaticUpdatesSettings_put_ScheduledInstallationTime(IAutomaticUpdatesSettings* This,LONG value) {
+    return This->lpVtbl->put_ScheduledInstallationTime(This,value);
+}
+static FORCEINLINE HRESULT IAutomaticUpdatesSettings_Refresh(IAutomaticUpdatesSettings* This) {
+    return This->lpVtbl->Refresh(This);
+}
+static FORCEINLINE HRESULT IAutomaticUpdatesSettings_Save(IAutomaticUpdatesSettings* This) {
+    return This->lpVtbl->Save(This);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IAutomaticUpdatesSettings_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IAutomaticUpdates interface
+ */
+#ifndef __IAutomaticUpdates_INTERFACE_DEFINED__
+#define __IAutomaticUpdates_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IAutomaticUpdates, 0x673425bf, 0xc082, 0x4c7c, 0xbd,0xfd, 0x56,0x94,0x64,0xb8,0xe0,0xce);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("673425bf-c082-4c7c-bdfd-569464b8e0ce")
+IAutomaticUpdates : public IDispatch
+{
+    virtual HRESULT STDMETHODCALLTYPE DetectNow(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Pause(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Resume(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE ShowSettingsDialog(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_Settings(
+        IAutomaticUpdatesSettings **retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_ServiceEnabled(
+        VARIANT_BOOL *retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE EnableService(
+        ) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IAutomaticUpdates, 0x673425bf, 0xc082, 0x4c7c, 0xbd,0xfd, 0x56,0x94,0x64,0xb8,0xe0,0xce)
+#endif
+#else
+typedef struct IAutomaticUpdatesVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IAutomaticUpdates *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IAutomaticUpdates *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IAutomaticUpdates *This);
+
+    /*** IDispatch methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
+        IAutomaticUpdates *This,
+        UINT *pctinfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
+        IAutomaticUpdates *This,
+        UINT iTInfo,
+        LCID lcid,
+        ITypeInfo **ppTInfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
+        IAutomaticUpdates *This,
+        REFIID riid,
+        LPOLESTR *rgszNames,
+        UINT cNames,
+        LCID lcid,
+        DISPID *rgDispId);
+
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        IAutomaticUpdates *This,
+        DISPID dispIdMember,
+        REFIID riid,
+        LCID lcid,
+        WORD wFlags,
+        DISPPARAMS *pDispParams,
+        VARIANT *pVarResult,
+        EXCEPINFO *pExcepInfo,
+        UINT *puArgErr);
+
+    /*** IAutomaticUpdates methods ***/
+    HRESULT (STDMETHODCALLTYPE *DetectNow)(
+        IAutomaticUpdates *This);
+
+    HRESULT (STDMETHODCALLTYPE *Pause)(
+        IAutomaticUpdates *This);
+
+    HRESULT (STDMETHODCALLTYPE *Resume)(
+        IAutomaticUpdates *This);
+
+    HRESULT (STDMETHODCALLTYPE *ShowSettingsDialog)(
+        IAutomaticUpdates *This);
+
+    HRESULT (STDMETHODCALLTYPE *get_Settings)(
+        IAutomaticUpdates *This,
+        IAutomaticUpdatesSettings **retval);
+
+    HRESULT (STDMETHODCALLTYPE *get_ServiceEnabled)(
+        IAutomaticUpdates *This,
+        VARIANT_BOOL *retval);
+
+    HRESULT (STDMETHODCALLTYPE *EnableService)(
+        IAutomaticUpdates *This);
+
+    END_INTERFACE
+} IAutomaticUpdatesVtbl;
+
+interface IAutomaticUpdates {
+    CONST_VTBL IAutomaticUpdatesVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IAutomaticUpdates_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IAutomaticUpdates_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IAutomaticUpdates_Release(This) (This)->lpVtbl->Release(This)
+/*** IDispatch methods ***/
+#define IAutomaticUpdates_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
+#define IAutomaticUpdates_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+#define IAutomaticUpdates_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+#define IAutomaticUpdates_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+/*** IAutomaticUpdates methods ***/
+#define IAutomaticUpdates_DetectNow(This) (This)->lpVtbl->DetectNow(This)
+#define IAutomaticUpdates_Pause(This) (This)->lpVtbl->Pause(This)
+#define IAutomaticUpdates_Resume(This) (This)->lpVtbl->Resume(This)
+#define IAutomaticUpdates_ShowSettingsDialog(This) (This)->lpVtbl->ShowSettingsDialog(This)
+#define IAutomaticUpdates_get_Settings(This,retval) (This)->lpVtbl->get_Settings(This,retval)
+#define IAutomaticUpdates_get_ServiceEnabled(This,retval) (This)->lpVtbl->get_ServiceEnabled(This,retval)
+#define IAutomaticUpdates_EnableService(This) (This)->lpVtbl->EnableService(This)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IAutomaticUpdates_QueryInterface(IAutomaticUpdates* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IAutomaticUpdates_AddRef(IAutomaticUpdates* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IAutomaticUpdates_Release(IAutomaticUpdates* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDispatch methods ***/
+static FORCEINLINE HRESULT IAutomaticUpdates_GetTypeInfoCount(IAutomaticUpdates* This,UINT *pctinfo) {
+    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
+}
+static FORCEINLINE HRESULT IAutomaticUpdates_GetTypeInfo(IAutomaticUpdates* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
+    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
+}
+static FORCEINLINE HRESULT IAutomaticUpdates_GetIDsOfNames(IAutomaticUpdates* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
+    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
+}
+static FORCEINLINE HRESULT IAutomaticUpdates_Invoke(IAutomaticUpdates* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
+    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
+}
+/*** IAutomaticUpdates methods ***/
+static FORCEINLINE HRESULT IAutomaticUpdates_DetectNow(IAutomaticUpdates* This) {
+    return This->lpVtbl->DetectNow(This);
+}
+static FORCEINLINE HRESULT IAutomaticUpdates_Pause(IAutomaticUpdates* This) {
+    return This->lpVtbl->Pause(This);
+}
+static FORCEINLINE HRESULT IAutomaticUpdates_Resume(IAutomaticUpdates* This) {
+    return This->lpVtbl->Resume(This);
+}
+static FORCEINLINE HRESULT IAutomaticUpdates_ShowSettingsDialog(IAutomaticUpdates* This) {
+    return This->lpVtbl->ShowSettingsDialog(This);
+}
+static FORCEINLINE HRESULT IAutomaticUpdates_get_Settings(IAutomaticUpdates* This,IAutomaticUpdatesSettings **retval) {
+    return This->lpVtbl->get_Settings(This,retval);
+}
+static FORCEINLINE HRESULT IAutomaticUpdates_get_ServiceEnabled(IAutomaticUpdates* This,VARIANT_BOOL *retval) {
+    return This->lpVtbl->get_ServiceEnabled(This,retval);
+}
+static FORCEINLINE HRESULT IAutomaticUpdates_EnableService(IAutomaticUpdates* This) {
+    return This->lpVtbl->EnableService(This);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IAutomaticUpdates_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IWebProxy interface
+ */
+#ifndef __IWebProxy_INTERFACE_DEFINED__
+#define __IWebProxy_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IWebProxy, 0x174c81fe, 0xaecd, 0x4dae, 0xb8,0xa0, 0x2c,0x63,0x18,0xdd,0x86,0xa8);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("174c81fe-aecd-4dae-b8a0-2c6318dd86a8")
+IWebProxy : public IDispatch
+{
+    virtual HRESULT STDMETHODCALLTYPE get_Address(
+        BSTR *retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_Address(
+        BSTR value) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_BypassList(
+        IStringCollection **retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_BypassList(
+        IStringCollection *value) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_BypassProxyOnLocal(
+        VARIANT_BOOL *retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_BypassProxyOnLocal(
+        VARIANT_BOOL value) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_ReadOnly(
+        VARIANT_BOOL *retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_UserName(
+        BSTR *retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_UserName(
+        BSTR value) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetPassword(
+        BSTR value) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE PromptForCredentials(
+        IUnknown *parentWindow,
+        BSTR title) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE PromptForCredentialsFromHwnd(
+        HWND parentWindow,
+        BSTR title) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_AutoDetect(
+        VARIANT_BOOL *retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_AutoDetect(
+        VARIANT_BOOL value) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IWebProxy, 0x174c81fe, 0xaecd, 0x4dae, 0xb8,0xa0, 0x2c,0x63,0x18,0xdd,0x86,0xa8)
+#endif
+#else
+typedef struct IWebProxyVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IWebProxy *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IWebProxy *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IWebProxy *This);
+
+    /*** IDispatch methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
+        IWebProxy *This,
+        UINT *pctinfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
+        IWebProxy *This,
+        UINT iTInfo,
+        LCID lcid,
+        ITypeInfo **ppTInfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
+        IWebProxy *This,
+        REFIID riid,
+        LPOLESTR *rgszNames,
+        UINT cNames,
+        LCID lcid,
+        DISPID *rgDispId);
+
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        IWebProxy *This,
+        DISPID dispIdMember,
+        REFIID riid,
+        LCID lcid,
+        WORD wFlags,
+        DISPPARAMS *pDispParams,
+        VARIANT *pVarResult,
+        EXCEPINFO *pExcepInfo,
+        UINT *puArgErr);
+
+    /*** IWebProxy methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_Address)(
+        IWebProxy *This,
+        BSTR *retval);
+
+    HRESULT (STDMETHODCALLTYPE *put_Address)(
+        IWebProxy *This,
+        BSTR value);
+
+    HRESULT (STDMETHODCALLTYPE *get_BypassList)(
+        IWebProxy *This,
+        IStringCollection **retval);
+
+    HRESULT (STDMETHODCALLTYPE *put_BypassList)(
+        IWebProxy *This,
+        IStringCollection *value);
+
+    HRESULT (STDMETHODCALLTYPE *get_BypassProxyOnLocal)(
+        IWebProxy *This,
+        VARIANT_BOOL *retval);
+
+    HRESULT (STDMETHODCALLTYPE *put_BypassProxyOnLocal)(
+        IWebProxy *This,
+        VARIANT_BOOL value);
+
+    HRESULT (STDMETHODCALLTYPE *get_ReadOnly)(
+        IWebProxy *This,
+        VARIANT_BOOL *retval);
+
+    HRESULT (STDMETHODCALLTYPE *get_UserName)(
+        IWebProxy *This,
+        BSTR *retval);
+
+    HRESULT (STDMETHODCALLTYPE *put_UserName)(
+        IWebProxy *This,
+        BSTR value);
+
+    HRESULT (STDMETHODCALLTYPE *SetPassword)(
+        IWebProxy *This,
+        BSTR value);
+
+    HRESULT (STDMETHODCALLTYPE *PromptForCredentials)(
+        IWebProxy *This,
+        IUnknown *parentWindow,
+        BSTR title);
+
+    HRESULT (STDMETHODCALLTYPE *PromptForCredentialsFromHwnd)(
+        IWebProxy *This,
+        HWND parentWindow,
+        BSTR title);
+
+    HRESULT (STDMETHODCALLTYPE *get_AutoDetect)(
+        IWebProxy *This,
+        VARIANT_BOOL *retval);
+
+    HRESULT (STDMETHODCALLTYPE *put_AutoDetect)(
+        IWebProxy *This,
+        VARIANT_BOOL value);
+
+    END_INTERFACE
+} IWebProxyVtbl;
+
+interface IWebProxy {
+    CONST_VTBL IWebProxyVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IWebProxy_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IWebProxy_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IWebProxy_Release(This) (This)->lpVtbl->Release(This)
+/*** IDispatch methods ***/
+#define IWebProxy_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
+#define IWebProxy_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+#define IWebProxy_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+#define IWebProxy_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+/*** IWebProxy methods ***/
+#define IWebProxy_get_Address(This,retval) (This)->lpVtbl->get_Address(This,retval)
+#define IWebProxy_put_Address(This,value) (This)->lpVtbl->put_Address(This,value)
+#define IWebProxy_get_BypassList(This,retval) (This)->lpVtbl->get_BypassList(This,retval)
+#define IWebProxy_put_BypassList(This,value) (This)->lpVtbl->put_BypassList(This,value)
+#define IWebProxy_get_BypassProxyOnLocal(This,retval) (This)->lpVtbl->get_BypassProxyOnLocal(This,retval)
+#define IWebProxy_put_BypassProxyOnLocal(This,value) (This)->lpVtbl->put_BypassProxyOnLocal(This,value)
+#define IWebProxy_get_ReadOnly(This,retval) (This)->lpVtbl->get_ReadOnly(This,retval)
+#define IWebProxy_get_UserName(This,retval) (This)->lpVtbl->get_UserName(This,retval)
+#define IWebProxy_put_UserName(This,value) (This)->lpVtbl->put_UserName(This,value)
+#define IWebProxy_SetPassword(This,value) (This)->lpVtbl->SetPassword(This,value)
+#define IWebProxy_PromptForCredentials(This,parentWindow,title) (This)->lpVtbl->PromptForCredentials(This,parentWindow,title)
+#define IWebProxy_PromptForCredentialsFromHwnd(This,parentWindow,title) (This)->lpVtbl->PromptForCredentialsFromHwnd(This,parentWindow,title)
+#define IWebProxy_get_AutoDetect(This,retval) (This)->lpVtbl->get_AutoDetect(This,retval)
+#define IWebProxy_put_AutoDetect(This,value) (This)->lpVtbl->put_AutoDetect(This,value)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IWebProxy_QueryInterface(IWebProxy* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IWebProxy_AddRef(IWebProxy* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IWebProxy_Release(IWebProxy* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDispatch methods ***/
+static FORCEINLINE HRESULT IWebProxy_GetTypeInfoCount(IWebProxy* This,UINT *pctinfo) {
+    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
+}
+static FORCEINLINE HRESULT IWebProxy_GetTypeInfo(IWebProxy* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
+    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
+}
+static FORCEINLINE HRESULT IWebProxy_GetIDsOfNames(IWebProxy* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
+    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
+}
+static FORCEINLINE HRESULT IWebProxy_Invoke(IWebProxy* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
+    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
+}
+/*** IWebProxy methods ***/
+static FORCEINLINE HRESULT IWebProxy_get_Address(IWebProxy* This,BSTR *retval) {
+    return This->lpVtbl->get_Address(This,retval);
+}
+static FORCEINLINE HRESULT IWebProxy_put_Address(IWebProxy* This,BSTR value) {
+    return This->lpVtbl->put_Address(This,value);
+}
+static FORCEINLINE HRESULT IWebProxy_get_BypassList(IWebProxy* This,IStringCollection **retval) {
+    return This->lpVtbl->get_BypassList(This,retval);
+}
+static FORCEINLINE HRESULT IWebProxy_put_BypassList(IWebProxy* This,IStringCollection *value) {
+    return This->lpVtbl->put_BypassList(This,value);
+}
+static FORCEINLINE HRESULT IWebProxy_get_BypassProxyOnLocal(IWebProxy* This,VARIANT_BOOL *retval) {
+    return This->lpVtbl->get_BypassProxyOnLocal(This,retval);
+}
+static FORCEINLINE HRESULT IWebProxy_put_BypassProxyOnLocal(IWebProxy* This,VARIANT_BOOL value) {
+    return This->lpVtbl->put_BypassProxyOnLocal(This,value);
+}
+static FORCEINLINE HRESULT IWebProxy_get_ReadOnly(IWebProxy* This,VARIANT_BOOL *retval) {
+    return This->lpVtbl->get_ReadOnly(This,retval);
+}
+static FORCEINLINE HRESULT IWebProxy_get_UserName(IWebProxy* This,BSTR *retval) {
+    return This->lpVtbl->get_UserName(This,retval);
+}
+static FORCEINLINE HRESULT IWebProxy_put_UserName(IWebProxy* This,BSTR value) {
+    return This->lpVtbl->put_UserName(This,value);
+}
+static FORCEINLINE HRESULT IWebProxy_SetPassword(IWebProxy* This,BSTR value) {
+    return This->lpVtbl->SetPassword(This,value);
+}
+static FORCEINLINE HRESULT IWebProxy_PromptForCredentials(IWebProxy* This,IUnknown *parentWindow,BSTR title) {
+    return This->lpVtbl->PromptForCredentials(This,parentWindow,title);
+}
+static FORCEINLINE HRESULT IWebProxy_PromptForCredentialsFromHwnd(IWebProxy* This,HWND parentWindow,BSTR title) {
+    return This->lpVtbl->PromptForCredentialsFromHwnd(This,parentWindow,title);
+}
+static FORCEINLINE HRESULT IWebProxy_get_AutoDetect(IWebProxy* This,VARIANT_BOOL *retval) {
+    return This->lpVtbl->get_AutoDetect(This,retval);
+}
+static FORCEINLINE HRESULT IWebProxy_put_AutoDetect(IWebProxy* This,VARIANT_BOOL value) {
+    return This->lpVtbl->put_AutoDetect(This,value);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IWebProxy_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IUpdateSession interface
+ */
+#ifndef __IUpdateSession_INTERFACE_DEFINED__
+#define __IUpdateSession_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IUpdateSession, 0x816858a4, 0x260d, 0x4260, 0x93,0x3a, 0x25,0x85,0xf1,0xab,0xc7,0x6b);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("816858a4-260d-4260-933a-2585f1abc76b")
+IUpdateSession : public IDispatch
+{
+    virtual HRESULT STDMETHODCALLTYPE get_ClientApplicationID(
+        BSTR *retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_ClientApplicationID(
+        BSTR value) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_ReadOnly(
+        VARIANT_BOOL *retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_WebProxy(
+        IWebProxy **retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_WebProxy(
+        IWebProxy *value) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateUpdateSearcher(
+        IUpdateSearcher **retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateUpdateDownloader(
+        IUpdateDownloader **retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateUpdateInstaller(
+        IUpdateInstaller **retval) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IUpdateSession, 0x816858a4, 0x260d, 0x4260, 0x93,0x3a, 0x25,0x85,0xf1,0xab,0xc7,0x6b)
+#endif
+#else
+typedef struct IUpdateSessionVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IUpdateSession *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IUpdateSession *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IUpdateSession *This);
+
+    /*** IDispatch methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
+        IUpdateSession *This,
+        UINT *pctinfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
+        IUpdateSession *This,
+        UINT iTInfo,
+        LCID lcid,
+        ITypeInfo **ppTInfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
+        IUpdateSession *This,
+        REFIID riid,
+        LPOLESTR *rgszNames,
+        UINT cNames,
+        LCID lcid,
+        DISPID *rgDispId);
+
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        IUpdateSession *This,
+        DISPID dispIdMember,
+        REFIID riid,
+        LCID lcid,
+        WORD wFlags,
+        DISPPARAMS *pDispParams,
+        VARIANT *pVarResult,
+        EXCEPINFO *pExcepInfo,
+        UINT *puArgErr);
+
+    /*** IUpdateSession methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_ClientApplicationID)(
+        IUpdateSession *This,
+        BSTR *retval);
+
+    HRESULT (STDMETHODCALLTYPE *put_ClientApplicationID)(
+        IUpdateSession *This,
+        BSTR value);
+
+    HRESULT (STDMETHODCALLTYPE *get_ReadOnly)(
+        IUpdateSession *This,
+        VARIANT_BOOL *retval);
+
+    HRESULT (STDMETHODCALLTYPE *get_WebProxy)(
+        IUpdateSession *This,
+        IWebProxy **retval);
+
+    HRESULT (STDMETHODCALLTYPE *put_WebProxy)(
+        IUpdateSession *This,
+        IWebProxy *value);
+
+    HRESULT (STDMETHODCALLTYPE *CreateUpdateSearcher)(
+        IUpdateSession *This,
+        IUpdateSearcher **retval);
+
+    HRESULT (STDMETHODCALLTYPE *CreateUpdateDownloader)(
+        IUpdateSession *This,
+        IUpdateDownloader **retval);
+
+    HRESULT (STDMETHODCALLTYPE *CreateUpdateInstaller)(
+        IUpdateSession *This,
+        IUpdateInstaller **retval);
+
+    END_INTERFACE
+} IUpdateSessionVtbl;
+
+interface IUpdateSession {
+    CONST_VTBL IUpdateSessionVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IUpdateSession_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IUpdateSession_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IUpdateSession_Release(This) (This)->lpVtbl->Release(This)
+/*** IDispatch methods ***/
+#define IUpdateSession_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
+#define IUpdateSession_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+#define IUpdateSession_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+#define IUpdateSession_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+/*** IUpdateSession methods ***/
+#define IUpdateSession_get_ClientApplicationID(This,retval) (This)->lpVtbl->get_ClientApplicationID(This,retval)
+#define IUpdateSession_put_ClientApplicationID(This,value) (This)->lpVtbl->put_ClientApplicationID(This,value)
+#define IUpdateSession_get_ReadOnly(This,retval) (This)->lpVtbl->get_ReadOnly(This,retval)
+#define IUpdateSession_get_WebProxy(This,retval) (This)->lpVtbl->get_WebProxy(This,retval)
+#define IUpdateSession_put_WebProxy(This,value) (This)->lpVtbl->put_WebProxy(This,value)
+#define IUpdateSession_CreateUpdateSearcher(This,retval) (This)->lpVtbl->CreateUpdateSearcher(This,retval)
+#define IUpdateSession_CreateUpdateDownloader(This,retval) (This)->lpVtbl->CreateUpdateDownloader(This,retval)
+#define IUpdateSession_CreateUpdateInstaller(This,retval) (This)->lpVtbl->CreateUpdateInstaller(This,retval)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IUpdateSession_QueryInterface(IUpdateSession* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IUpdateSession_AddRef(IUpdateSession* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IUpdateSession_Release(IUpdateSession* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDispatch methods ***/
+static FORCEINLINE HRESULT IUpdateSession_GetTypeInfoCount(IUpdateSession* This,UINT *pctinfo) {
+    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
+}
+static FORCEINLINE HRESULT IUpdateSession_GetTypeInfo(IUpdateSession* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
+    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
+}
+static FORCEINLINE HRESULT IUpdateSession_GetIDsOfNames(IUpdateSession* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
+    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
+}
+static FORCEINLINE HRESULT IUpdateSession_Invoke(IUpdateSession* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
+    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
+}
+/*** IUpdateSession methods ***/
+static FORCEINLINE HRESULT IUpdateSession_get_ClientApplicationID(IUpdateSession* This,BSTR *retval) {
+    return This->lpVtbl->get_ClientApplicationID(This,retval);
+}
+static FORCEINLINE HRESULT IUpdateSession_put_ClientApplicationID(IUpdateSession* This,BSTR value) {
+    return This->lpVtbl->put_ClientApplicationID(This,value);
+}
+static FORCEINLINE HRESULT IUpdateSession_get_ReadOnly(IUpdateSession* This,VARIANT_BOOL *retval) {
+    return This->lpVtbl->get_ReadOnly(This,retval);
+}
+static FORCEINLINE HRESULT IUpdateSession_get_WebProxy(IUpdateSession* This,IWebProxy **retval) {
+    return This->lpVtbl->get_WebProxy(This,retval);
+}
+static FORCEINLINE HRESULT IUpdateSession_put_WebProxy(IUpdateSession* This,IWebProxy *value) {
+    return This->lpVtbl->put_WebProxy(This,value);
+}
+static FORCEINLINE HRESULT IUpdateSession_CreateUpdateSearcher(IUpdateSession* This,IUpdateSearcher **retval) {
+    return This->lpVtbl->CreateUpdateSearcher(This,retval);
+}
+static FORCEINLINE HRESULT IUpdateSession_CreateUpdateDownloader(IUpdateSession* This,IUpdateDownloader **retval) {
+    return This->lpVtbl->CreateUpdateDownloader(This,retval);
+}
+static FORCEINLINE HRESULT IUpdateSession_CreateUpdateInstaller(IUpdateSession* This,IUpdateInstaller **retval) {
+    return This->lpVtbl->CreateUpdateInstaller(This,retval);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IUpdateSession_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IImageInformation interface
+ */
+#ifndef __IImageInformation_INTERFACE_DEFINED__
+#define __IImageInformation_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IImageInformation, 0x7c907864, 0x346c, 0x4aeb, 0x8f,0x3f, 0x57,0xda,0x28,0x9f,0x96,0x9f);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("7c907864-346c-4aeb-8f3f-57da289f969f")
+IImageInformation : public IDispatch
+{
+    virtual HRESULT STDMETHODCALLTYPE get_AltText(
+        BSTR *retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_Height(
+        LONG *retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_Source(
+        BSTR *retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_Width(
+        LONG *retval) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IImageInformation, 0x7c907864, 0x346c, 0x4aeb, 0x8f,0x3f, 0x57,0xda,0x28,0x9f,0x96,0x9f)
+#endif
+#else
+typedef struct IImageInformationVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IImageInformation *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IImageInformation *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IImageInformation *This);
+
+    /*** IDispatch methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
+        IImageInformation *This,
+        UINT *pctinfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
+        IImageInformation *This,
+        UINT iTInfo,
+        LCID lcid,
+        ITypeInfo **ppTInfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
+        IImageInformation *This,
+        REFIID riid,
+        LPOLESTR *rgszNames,
+        UINT cNames,
+        LCID lcid,
+        DISPID *rgDispId);
+
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        IImageInformation *This,
+        DISPID dispIdMember,
+        REFIID riid,
+        LCID lcid,
+        WORD wFlags,
+        DISPPARAMS *pDispParams,
+        VARIANT *pVarResult,
+        EXCEPINFO *pExcepInfo,
+        UINT *puArgErr);
+
+    /*** IImageInformation methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_AltText)(
+        IImageInformation *This,
+        BSTR *retval);
+
+    HRESULT (STDMETHODCALLTYPE *get_Height)(
+        IImageInformation *This,
+        LONG *retval);
+
+    HRESULT (STDMETHODCALLTYPE *get_Source)(
+        IImageInformation *This,
+        BSTR *retval);
+
+    HRESULT (STDMETHODCALLTYPE *get_Width)(
+        IImageInformation *This,
+        LONG *retval);
+
+    END_INTERFACE
+} IImageInformationVtbl;
+
+interface IImageInformation {
+    CONST_VTBL IImageInformationVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IImageInformation_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IImageInformation_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IImageInformation_Release(This) (This)->lpVtbl->Release(This)
+/*** IDispatch methods ***/
+#define IImageInformation_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
+#define IImageInformation_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+#define IImageInformation_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+#define IImageInformation_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+/*** IImageInformation methods ***/
+#define IImageInformation_get_AltText(This,retval) (This)->lpVtbl->get_AltText(This,retval)
+#define IImageInformation_get_Height(This,retval) (This)->lpVtbl->get_Height(This,retval)
+#define IImageInformation_get_Source(This,retval) (This)->lpVtbl->get_Source(This,retval)
+#define IImageInformation_get_Width(This,retval) (This)->lpVtbl->get_Width(This,retval)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IImageInformation_QueryInterface(IImageInformation* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IImageInformation_AddRef(IImageInformation* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IImageInformation_Release(IImageInformation* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDispatch methods ***/
+static FORCEINLINE HRESULT IImageInformation_GetTypeInfoCount(IImageInformation* This,UINT *pctinfo) {
+    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
+}
+static FORCEINLINE HRESULT IImageInformation_GetTypeInfo(IImageInformation* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
+    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
+}
+static FORCEINLINE HRESULT IImageInformation_GetIDsOfNames(IImageInformation* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
+    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
+}
+static FORCEINLINE HRESULT IImageInformation_Invoke(IImageInformation* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
+    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
+}
+/*** IImageInformation methods ***/
+static FORCEINLINE HRESULT IImageInformation_get_AltText(IImageInformation* This,BSTR *retval) {
+    return This->lpVtbl->get_AltText(This,retval);
+}
+static FORCEINLINE HRESULT IImageInformation_get_Height(IImageInformation* This,LONG *retval) {
+    return This->lpVtbl->get_Height(This,retval);
+}
+static FORCEINLINE HRESULT IImageInformation_get_Source(IImageInformation* This,BSTR *retval) {
+    return This->lpVtbl->get_Source(This,retval);
+}
+static FORCEINLINE HRESULT IImageInformation_get_Width(IImageInformation* This,LONG *retval) {
+    return This->lpVtbl->get_Width(This,retval);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IImageInformation_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * ICategory interface
+ */
+#ifndef __ICategory_INTERFACE_DEFINED__
+#define __ICategory_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_ICategory, 0x81ddc1b8, 0x9d35, 0x47a6, 0xb4,0x71, 0x5b,0x80,0xf5,0x19,0x22,0x3b);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("81ddc1b8-9d35-47a6-b471-5b80f519223b")
+ICategory : public IDispatch
+{
+    virtual HRESULT STDMETHODCALLTYPE get_Name(
+        BSTR *retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_CategoryID(
+        BSTR *retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_Children(
+        ICategoryCollection **retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_Description(
+        BSTR *retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_Image(
+        IImageInformation **retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_Order(
+        LONG *retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_Parent(
+        ICategory **retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_Type(
+        BSTR *retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_Updates(
+        IUpdateCollection **retval) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(ICategory, 0x81ddc1b8, 0x9d35, 0x47a6, 0xb4,0x71, 0x5b,0x80,0xf5,0x19,0x22,0x3b)
+#endif
+#else
+typedef struct ICategoryVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        ICategory *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        ICategory *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        ICategory *This);
+
+    /*** IDispatch methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
+        ICategory *This,
+        UINT *pctinfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
+        ICategory *This,
+        UINT iTInfo,
+        LCID lcid,
+        ITypeInfo **ppTInfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
+        ICategory *This,
+        REFIID riid,
+        LPOLESTR *rgszNames,
+        UINT cNames,
+        LCID lcid,
+        DISPID *rgDispId);
+
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        ICategory *This,
+        DISPID dispIdMember,
+        REFIID riid,
+        LCID lcid,
+        WORD wFlags,
+        DISPPARAMS *pDispParams,
+        VARIANT *pVarResult,
+        EXCEPINFO *pExcepInfo,
+        UINT *puArgErr);
+
+    /*** ICategory methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_Name)(
+        ICategory *This,
+        BSTR *retval);
+
+    HRESULT (STDMETHODCALLTYPE *get_CategoryID)(
+        ICategory *This,
+        BSTR *retval);
+
+    HRESULT (STDMETHODCALLTYPE *get_Children)(
+        ICategory *This,
+        ICategoryCollection **retval);
+
+    HRESULT (STDMETHODCALLTYPE *get_Description)(
+        ICategory *This,
+        BSTR *retval);
+
+    HRESULT (STDMETHODCALLTYPE *get_Image)(
+        ICategory *This,
+        IImageInformation **retval);
+
+    HRESULT (STDMETHODCALLTYPE *get_Order)(
+        ICategory *This,
+        LONG *retval);
+
+    HRESULT (STDMETHODCALLTYPE *get_Parent)(
+        ICategory *This,
+        ICategory **retval);
+
+    HRESULT (STDMETHODCALLTYPE *get_Type)(
+        ICategory *This,
+        BSTR *retval);
+
+    HRESULT (STDMETHODCALLTYPE *get_Updates)(
+        ICategory *This,
+        IUpdateCollection **retval);
+
+    END_INTERFACE
+} ICategoryVtbl;
+
+interface ICategory {
+    CONST_VTBL ICategoryVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define ICategory_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define ICategory_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define ICategory_Release(This) (This)->lpVtbl->Release(This)
+/*** IDispatch methods ***/
+#define ICategory_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
+#define ICategory_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+#define ICategory_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+#define ICategory_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+/*** ICategory methods ***/
+#define ICategory_get_Name(This,retval) (This)->lpVtbl->get_Name(This,retval)
+#define ICategory_get_CategoryID(This,retval) (This)->lpVtbl->get_CategoryID(This,retval)
+#define ICategory_get_Children(This,retval) (This)->lpVtbl->get_Children(This,retval)
+#define ICategory_get_Description(This,retval) (This)->lpVtbl->get_Description(This,retval)
+#define ICategory_get_Image(This,retval) (This)->lpVtbl->get_Image(This,retval)
+#define ICategory_get_Order(This,retval) (This)->lpVtbl->get_Order(This,retval)
+#define ICategory_get_Parent(This,retval) (This)->lpVtbl->get_Parent(This,retval)
+#define ICategory_get_Type(This,retval) (This)->lpVtbl->get_Type(This,retval)
+#define ICategory_get_Updates(This,retval) (This)->lpVtbl->get_Updates(This,retval)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT ICategory_QueryInterface(ICategory* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG ICategory_AddRef(ICategory* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG ICategory_Release(ICategory* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDispatch methods ***/
+static FORCEINLINE HRESULT ICategory_GetTypeInfoCount(ICategory* This,UINT *pctinfo) {
+    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
+}
+static FORCEINLINE HRESULT ICategory_GetTypeInfo(ICategory* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
+    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
+}
+static FORCEINLINE HRESULT ICategory_GetIDsOfNames(ICategory* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
+    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
+}
+static FORCEINLINE HRESULT ICategory_Invoke(ICategory* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
+    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
+}
+/*** ICategory methods ***/
+static FORCEINLINE HRESULT ICategory_get_Name(ICategory* This,BSTR *retval) {
+    return This->lpVtbl->get_Name(This,retval);
+}
+static FORCEINLINE HRESULT ICategory_get_CategoryID(ICategory* This,BSTR *retval) {
+    return This->lpVtbl->get_CategoryID(This,retval);
+}
+static FORCEINLINE HRESULT ICategory_get_Children(ICategory* This,ICategoryCollection **retval) {
+    return This->lpVtbl->get_Children(This,retval);
+}
+static FORCEINLINE HRESULT ICategory_get_Description(ICategory* This,BSTR *retval) {
+    return This->lpVtbl->get_Description(This,retval);
+}
+static FORCEINLINE HRESULT ICategory_get_Image(ICategory* This,IImageInformation **retval) {
+    return This->lpVtbl->get_Image(This,retval);
+}
+static FORCEINLINE HRESULT ICategory_get_Order(ICategory* This,LONG *retval) {
+    return This->lpVtbl->get_Order(This,retval);
+}
+static FORCEINLINE HRESULT ICategory_get_Parent(ICategory* This,ICategory **retval) {
+    return This->lpVtbl->get_Parent(This,retval);
+}
+static FORCEINLINE HRESULT ICategory_get_Type(ICategory* This,BSTR *retval) {
+    return This->lpVtbl->get_Type(This,retval);
+}
+static FORCEINLINE HRESULT ICategory_get_Updates(ICategory* This,IUpdateCollection **retval) {
+    return This->lpVtbl->get_Updates(This,retval);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __ICategory_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * ICategoryCollection interface
+ */
+#ifndef __ICategoryCollection_INTERFACE_DEFINED__
+#define __ICategoryCollection_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_ICategoryCollection, 0x3a56bfb8, 0x576c, 0x43f7, 0x93,0x35, 0xfe,0x48,0x38,0xfd,0x7e,0x37);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("3a56bfb8-576c-43f7-9335-fe4838fd7e37")
+ICategoryCollection : public IDispatch
+{
+    virtual HRESULT STDMETHODCALLTYPE get_Item(
+        LONG index,
+        ICategory **retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get__NewEnum(
+        IUnknown **retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_Count(
+        LONG *retval) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(ICategoryCollection, 0x3a56bfb8, 0x576c, 0x43f7, 0x93,0x35, 0xfe,0x48,0x38,0xfd,0x7e,0x37)
+#endif
+#else
+typedef struct ICategoryCollectionVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        ICategoryCollection *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        ICategoryCollection *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        ICategoryCollection *This);
+
+    /*** IDispatch methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
+        ICategoryCollection *This,
+        UINT *pctinfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
+        ICategoryCollection *This,
+        UINT iTInfo,
+        LCID lcid,
+        ITypeInfo **ppTInfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
+        ICategoryCollection *This,
+        REFIID riid,
+        LPOLESTR *rgszNames,
+        UINT cNames,
+        LCID lcid,
+        DISPID *rgDispId);
+
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        ICategoryCollection *This,
+        DISPID dispIdMember,
+        REFIID riid,
+        LCID lcid,
+        WORD wFlags,
+        DISPPARAMS *pDispParams,
+        VARIANT *pVarResult,
+        EXCEPINFO *pExcepInfo,
+        UINT *puArgErr);
+
+    /*** ICategoryCollection methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_Item)(
+        ICategoryCollection *This,
+        LONG index,
+        ICategory **retval);
+
+    HRESULT (STDMETHODCALLTYPE *get__NewEnum)(
+        ICategoryCollection *This,
+        IUnknown **retval);
+
+    HRESULT (STDMETHODCALLTYPE *get_Count)(
+        ICategoryCollection *This,
+        LONG *retval);
+
+    END_INTERFACE
+} ICategoryCollectionVtbl;
+
+interface ICategoryCollection {
+    CONST_VTBL ICategoryCollectionVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define ICategoryCollection_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define ICategoryCollection_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define ICategoryCollection_Release(This) (This)->lpVtbl->Release(This)
+/*** IDispatch methods ***/
+#define ICategoryCollection_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
+#define ICategoryCollection_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+#define ICategoryCollection_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+#define ICategoryCollection_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+/*** ICategoryCollection methods ***/
+#define ICategoryCollection_get_Item(This,index,retval) (This)->lpVtbl->get_Item(This,index,retval)
+#define ICategoryCollection_get__NewEnum(This,retval) (This)->lpVtbl->get__NewEnum(This,retval)
+#define ICategoryCollection_get_Count(This,retval) (This)->lpVtbl->get_Count(This,retval)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT ICategoryCollection_QueryInterface(ICategoryCollection* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG ICategoryCollection_AddRef(ICategoryCollection* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG ICategoryCollection_Release(ICategoryCollection* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDispatch methods ***/
+static FORCEINLINE HRESULT ICategoryCollection_GetTypeInfoCount(ICategoryCollection* This,UINT *pctinfo) {
+    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
+}
+static FORCEINLINE HRESULT ICategoryCollection_GetTypeInfo(ICategoryCollection* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
+    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
+}
+static FORCEINLINE HRESULT ICategoryCollection_GetIDsOfNames(ICategoryCollection* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
+    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
+}
+static FORCEINLINE HRESULT ICategoryCollection_Invoke(ICategoryCollection* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
+    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
+}
+/*** ICategoryCollection methods ***/
+static FORCEINLINE HRESULT ICategoryCollection_get_Item(ICategoryCollection* This,LONG index,ICategory **retval) {
+    return This->lpVtbl->get_Item(This,index,retval);
+}
+static FORCEINLINE HRESULT ICategoryCollection_get__NewEnum(ICategoryCollection* This,IUnknown **retval) {
+    return This->lpVtbl->get__NewEnum(This,retval);
+}
+static FORCEINLINE HRESULT ICategoryCollection_get_Count(ICategoryCollection* This,LONG *retval) {
+    return This->lpVtbl->get_Count(This,retval);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __ICategoryCollection_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IStringCollection interface
+ */
+#ifndef __IStringCollection_INTERFACE_DEFINED__
+#define __IStringCollection_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IStringCollection, 0xeff90582, 0x2ddc, 0x480f, 0xa0,0x6d, 0x60,0xf3,0xfb,0xc3,0x62,0xc3);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("eff90582-2ddc-480f-a06d-60f3fbc362c3")
+IStringCollection : public IDispatch
+{
+    virtual HRESULT STDMETHODCALLTYPE get_Item(
+        LONG index,
+        BSTR *retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_Item(
+        LONG index,
+        BSTR value) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get__NewEnum(
+        IUnknown **retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_Count(
+        LONG *retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_ReadOnly(
+        VARIANT_BOOL *retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Add(
+        BSTR value,
+        LONG *retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Clear(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Copy(
+        IStringCollection **retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Insert(
+        LONG index,
+        BSTR value) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE RemoveAt(
+        LONG index) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IStringCollection, 0xeff90582, 0x2ddc, 0x480f, 0xa0,0x6d, 0x60,0xf3,0xfb,0xc3,0x62,0xc3)
+#endif
+#else
+typedef struct IStringCollectionVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IStringCollection *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IStringCollection *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IStringCollection *This);
+
+    /*** IDispatch methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
+        IStringCollection *This,
+        UINT *pctinfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
+        IStringCollection *This,
+        UINT iTInfo,
+        LCID lcid,
+        ITypeInfo **ppTInfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
+        IStringCollection *This,
+        REFIID riid,
+        LPOLESTR *rgszNames,
+        UINT cNames,
+        LCID lcid,
+        DISPID *rgDispId);
+
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        IStringCollection *This,
+        DISPID dispIdMember,
+        REFIID riid,
+        LCID lcid,
+        WORD wFlags,
+        DISPPARAMS *pDispParams,
+        VARIANT *pVarResult,
+        EXCEPINFO *pExcepInfo,
+        UINT *puArgErr);
+
+    /*** IStringCollection methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_Item)(
+        IStringCollection *This,
+        LONG index,
+        BSTR *retval);
+
+    HRESULT (STDMETHODCALLTYPE *put_Item)(
+        IStringCollection *This,
+        LONG index,
+        BSTR value);
+
+    HRESULT (STDMETHODCALLTYPE *get__NewEnum)(
+        IStringCollection *This,
+        IUnknown **retval);
+
+    HRESULT (STDMETHODCALLTYPE *get_Count)(
+        IStringCollection *This,
+        LONG *retval);
+
+    HRESULT (STDMETHODCALLTYPE *get_ReadOnly)(
+        IStringCollection *This,
+        VARIANT_BOOL *retval);
+
+    HRESULT (STDMETHODCALLTYPE *Add)(
+        IStringCollection *This,
+        BSTR value,
+        LONG *retval);
+
+    HRESULT (STDMETHODCALLTYPE *Clear)(
+        IStringCollection *This);
+
+    HRESULT (STDMETHODCALLTYPE *Copy)(
+        IStringCollection *This,
+        IStringCollection **retval);
+
+    HRESULT (STDMETHODCALLTYPE *Insert)(
+        IStringCollection *This,
+        LONG index,
+        BSTR value);
+
+    HRESULT (STDMETHODCALLTYPE *RemoveAt)(
+        IStringCollection *This,
+        LONG index);
+
+    END_INTERFACE
+} IStringCollectionVtbl;
+
+interface IStringCollection {
+    CONST_VTBL IStringCollectionVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IStringCollection_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IStringCollection_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IStringCollection_Release(This) (This)->lpVtbl->Release(This)
+/*** IDispatch methods ***/
+#define IStringCollection_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
+#define IStringCollection_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+#define IStringCollection_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+#define IStringCollection_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+/*** IStringCollection methods ***/
+#define IStringCollection_get_Item(This,index,retval) (This)->lpVtbl->get_Item(This,index,retval)
+#define IStringCollection_put_Item(This,index,value) (This)->lpVtbl->put_Item(This,index,value)
+#define IStringCollection_get__NewEnum(This,retval) (This)->lpVtbl->get__NewEnum(This,retval)
+#define IStringCollection_get_Count(This,retval) (This)->lpVtbl->get_Count(This,retval)
+#define IStringCollection_get_ReadOnly(This,retval) (This)->lpVtbl->get_ReadOnly(This,retval)
+#define IStringCollection_Add(This,value,retval) (This)->lpVtbl->Add(This,value,retval)
+#define IStringCollection_Clear(This) (This)->lpVtbl->Clear(This)
+#define IStringCollection_Copy(This,retval) (This)->lpVtbl->Copy(This,retval)
+#define IStringCollection_Insert(This,index,value) (This)->lpVtbl->Insert(This,index,value)
+#define IStringCollection_RemoveAt(This,index) (This)->lpVtbl->RemoveAt(This,index)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IStringCollection_QueryInterface(IStringCollection* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IStringCollection_AddRef(IStringCollection* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IStringCollection_Release(IStringCollection* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDispatch methods ***/
+static FORCEINLINE HRESULT IStringCollection_GetTypeInfoCount(IStringCollection* This,UINT *pctinfo) {
+    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
+}
+static FORCEINLINE HRESULT IStringCollection_GetTypeInfo(IStringCollection* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
+    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
+}
+static FORCEINLINE HRESULT IStringCollection_GetIDsOfNames(IStringCollection* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
+    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
+}
+static FORCEINLINE HRESULT IStringCollection_Invoke(IStringCollection* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
+    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
+}
+/*** IStringCollection methods ***/
+static FORCEINLINE HRESULT IStringCollection_get_Item(IStringCollection* This,LONG index,BSTR *retval) {
+    return This->lpVtbl->get_Item(This,index,retval);
+}
+static FORCEINLINE HRESULT IStringCollection_put_Item(IStringCollection* This,LONG index,BSTR value) {
+    return This->lpVtbl->put_Item(This,index,value);
+}
+static FORCEINLINE HRESULT IStringCollection_get__NewEnum(IStringCollection* This,IUnknown **retval) {
+    return This->lpVtbl->get__NewEnum(This,retval);
+}
+static FORCEINLINE HRESULT IStringCollection_get_Count(IStringCollection* This,LONG *retval) {
+    return This->lpVtbl->get_Count(This,retval);
+}
+static FORCEINLINE HRESULT IStringCollection_get_ReadOnly(IStringCollection* This,VARIANT_BOOL *retval) {
+    return This->lpVtbl->get_ReadOnly(This,retval);
+}
+static FORCEINLINE HRESULT IStringCollection_Add(IStringCollection* This,BSTR value,LONG *retval) {
+    return This->lpVtbl->Add(This,value,retval);
+}
+static FORCEINLINE HRESULT IStringCollection_Clear(IStringCollection* This) {
+    return This->lpVtbl->Clear(This);
+}
+static FORCEINLINE HRESULT IStringCollection_Copy(IStringCollection* This,IStringCollection **retval) {
+    return This->lpVtbl->Copy(This,retval);
+}
+static FORCEINLINE HRESULT IStringCollection_Insert(IStringCollection* This,LONG index,BSTR value) {
+    return This->lpVtbl->Insert(This,index,value);
+}
+static FORCEINLINE HRESULT IStringCollection_RemoveAt(IStringCollection* This,LONG index) {
+    return This->lpVtbl->RemoveAt(This,index);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IStringCollection_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IUpdateException interface
+ */
+#ifndef __IUpdateException_INTERFACE_DEFINED__
+#define __IUpdateException_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IUpdateException, 0xa376dd5e, 0x09d4, 0x427f, 0xaf,0x7c, 0xfe,0xd5,0xb6,0xe1,0xc1,0xd6);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("a376dd5e-09d4-427f-af7c-fed5b6e1c1d6")
+IUpdateException : public IDispatch
+{
+    virtual HRESULT STDMETHODCALLTYPE get_Message(
+        BSTR *retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_HResult(
+        LONG *retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_Context(
+        UpdateExceptionContext *retval) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IUpdateException, 0xa376dd5e, 0x09d4, 0x427f, 0xaf,0x7c, 0xfe,0xd5,0xb6,0xe1,0xc1,0xd6)
+#endif
+#else
+typedef struct IUpdateExceptionVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IUpdateException *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IUpdateException *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IUpdateException *This);
+
+    /*** IDispatch methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
+        IUpdateException *This,
+        UINT *pctinfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
+        IUpdateException *This,
+        UINT iTInfo,
+        LCID lcid,
+        ITypeInfo **ppTInfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
+        IUpdateException *This,
+        REFIID riid,
+        LPOLESTR *rgszNames,
+        UINT cNames,
+        LCID lcid,
+        DISPID *rgDispId);
+
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        IUpdateException *This,
+        DISPID dispIdMember,
+        REFIID riid,
+        LCID lcid,
+        WORD wFlags,
+        DISPPARAMS *pDispParams,
+        VARIANT *pVarResult,
+        EXCEPINFO *pExcepInfo,
+        UINT *puArgErr);
+
+    /*** IUpdateException methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_Message)(
+        IUpdateException *This,
+        BSTR *retval);
+
+    HRESULT (STDMETHODCALLTYPE *get_HResult)(
+        IUpdateException *This,
+        LONG *retval);
+
+    HRESULT (STDMETHODCALLTYPE *get_Context)(
+        IUpdateException *This,
+        UpdateExceptionContext *retval);
+
+    END_INTERFACE
+} IUpdateExceptionVtbl;
+
+interface IUpdateException {
+    CONST_VTBL IUpdateExceptionVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IUpdateException_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IUpdateException_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IUpdateException_Release(This) (This)->lpVtbl->Release(This)
+/*** IDispatch methods ***/
+#define IUpdateException_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
+#define IUpdateException_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+#define IUpdateException_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+#define IUpdateException_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+/*** IUpdateException methods ***/
+#define IUpdateException_get_Message(This,retval) (This)->lpVtbl->get_Message(This,retval)
+#define IUpdateException_get_HResult(This,retval) (This)->lpVtbl->get_HResult(This,retval)
+#define IUpdateException_get_Context(This,retval) (This)->lpVtbl->get_Context(This,retval)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IUpdateException_QueryInterface(IUpdateException* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IUpdateException_AddRef(IUpdateException* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IUpdateException_Release(IUpdateException* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDispatch methods ***/
+static FORCEINLINE HRESULT IUpdateException_GetTypeInfoCount(IUpdateException* This,UINT *pctinfo) {
+    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
+}
+static FORCEINLINE HRESULT IUpdateException_GetTypeInfo(IUpdateException* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
+    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
+}
+static FORCEINLINE HRESULT IUpdateException_GetIDsOfNames(IUpdateException* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
+    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
+}
+static FORCEINLINE HRESULT IUpdateException_Invoke(IUpdateException* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
+    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
+}
+/*** IUpdateException methods ***/
+static FORCEINLINE HRESULT IUpdateException_get_Message(IUpdateException* This,BSTR *retval) {
+    return This->lpVtbl->get_Message(This,retval);
+}
+static FORCEINLINE HRESULT IUpdateException_get_HResult(IUpdateException* This,LONG *retval) {
+    return This->lpVtbl->get_HResult(This,retval);
+}
+static FORCEINLINE HRESULT IUpdateException_get_Context(IUpdateException* This,UpdateExceptionContext *retval) {
+    return This->lpVtbl->get_Context(This,retval);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IUpdateException_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IUpdateExceptionCollection interface
+ */
+#ifndef __IUpdateExceptionCollection_INTERFACE_DEFINED__
+#define __IUpdateExceptionCollection_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IUpdateExceptionCollection, 0x503626a3, 0x8e14, 0x4729, 0x93,0x55, 0x0f,0xe6,0x64,0xbd,0x23,0x21);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("503626a3-8e14-4729-9355-0fe664bd2321")
+IUpdateExceptionCollection : public IDispatch
+{
+    virtual HRESULT STDMETHODCALLTYPE get_Item(
+        LONG index,
+        IUpdateException **retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get__NewEnum(
+        IUnknown **retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_Count(
+        LONG *retval) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IUpdateExceptionCollection, 0x503626a3, 0x8e14, 0x4729, 0x93,0x55, 0x0f,0xe6,0x64,0xbd,0x23,0x21)
+#endif
+#else
+typedef struct IUpdateExceptionCollectionVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IUpdateExceptionCollection *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IUpdateExceptionCollection *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IUpdateExceptionCollection *This);
+
+    /*** IDispatch methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
+        IUpdateExceptionCollection *This,
+        UINT *pctinfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
+        IUpdateExceptionCollection *This,
+        UINT iTInfo,
+        LCID lcid,
+        ITypeInfo **ppTInfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
+        IUpdateExceptionCollection *This,
+        REFIID riid,
+        LPOLESTR *rgszNames,
+        UINT cNames,
+        LCID lcid,
+        DISPID *rgDispId);
+
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        IUpdateExceptionCollection *This,
+        DISPID dispIdMember,
+        REFIID riid,
+        LCID lcid,
+        WORD wFlags,
+        DISPPARAMS *pDispParams,
+        VARIANT *pVarResult,
+        EXCEPINFO *pExcepInfo,
+        UINT *puArgErr);
+
+    /*** IUpdateExceptionCollection methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_Item)(
+        IUpdateExceptionCollection *This,
+        LONG index,
+        IUpdateException **retval);
+
+    HRESULT (STDMETHODCALLTYPE *get__NewEnum)(
+        IUpdateExceptionCollection *This,
+        IUnknown **retval);
+
+    HRESULT (STDMETHODCALLTYPE *get_Count)(
+        IUpdateExceptionCollection *This,
+        LONG *retval);
+
+    END_INTERFACE
+} IUpdateExceptionCollectionVtbl;
+
+interface IUpdateExceptionCollection {
+    CONST_VTBL IUpdateExceptionCollectionVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IUpdateExceptionCollection_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IUpdateExceptionCollection_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IUpdateExceptionCollection_Release(This) (This)->lpVtbl->Release(This)
+/*** IDispatch methods ***/
+#define IUpdateExceptionCollection_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
+#define IUpdateExceptionCollection_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+#define IUpdateExceptionCollection_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+#define IUpdateExceptionCollection_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+/*** IUpdateExceptionCollection methods ***/
+#define IUpdateExceptionCollection_get_Item(This,index,retval) (This)->lpVtbl->get_Item(This,index,retval)
+#define IUpdateExceptionCollection_get__NewEnum(This,retval) (This)->lpVtbl->get__NewEnum(This,retval)
+#define IUpdateExceptionCollection_get_Count(This,retval) (This)->lpVtbl->get_Count(This,retval)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IUpdateExceptionCollection_QueryInterface(IUpdateExceptionCollection* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IUpdateExceptionCollection_AddRef(IUpdateExceptionCollection* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IUpdateExceptionCollection_Release(IUpdateExceptionCollection* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDispatch methods ***/
+static FORCEINLINE HRESULT IUpdateExceptionCollection_GetTypeInfoCount(IUpdateExceptionCollection* This,UINT *pctinfo) {
+    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
+}
+static FORCEINLINE HRESULT IUpdateExceptionCollection_GetTypeInfo(IUpdateExceptionCollection* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
+    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
+}
+static FORCEINLINE HRESULT IUpdateExceptionCollection_GetIDsOfNames(IUpdateExceptionCollection* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
+    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
+}
+static FORCEINLINE HRESULT IUpdateExceptionCollection_Invoke(IUpdateExceptionCollection* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
+    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
+}
+/*** IUpdateExceptionCollection methods ***/
+static FORCEINLINE HRESULT IUpdateExceptionCollection_get_Item(IUpdateExceptionCollection* This,LONG index,IUpdateException **retval) {
+    return This->lpVtbl->get_Item(This,index,retval);
+}
+static FORCEINLINE HRESULT IUpdateExceptionCollection_get__NewEnum(IUpdateExceptionCollection* This,IUnknown **retval) {
+    return This->lpVtbl->get__NewEnum(This,retval);
+}
+static FORCEINLINE HRESULT IUpdateExceptionCollection_get_Count(IUpdateExceptionCollection* This,LONG *retval) {
+    return This->lpVtbl->get_Count(This,retval);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IUpdateExceptionCollection_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IUpdateIdentity interface
+ */
+#ifndef __IUpdateIdentity_INTERFACE_DEFINED__
+#define __IUpdateIdentity_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IUpdateIdentity, 0x46297823, 0x9940, 0x4c09, 0xae,0xd9, 0xcd,0x3e,0xa6,0xd0,0x59,0x68);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("46297823-9940-4c09-aed9-cd3ea6d05968")
+IUpdateIdentity : public IDispatch
+{
+    virtual HRESULT STDMETHODCALLTYPE get_RevisionNumber(
+        LONG *retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_UpdateID(
+        BSTR *retval) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IUpdateIdentity, 0x46297823, 0x9940, 0x4c09, 0xae,0xd9, 0xcd,0x3e,0xa6,0xd0,0x59,0x68)
+#endif
+#else
+typedef struct IUpdateIdentityVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IUpdateIdentity *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IUpdateIdentity *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IUpdateIdentity *This);
+
+    /*** IDispatch methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
+        IUpdateIdentity *This,
+        UINT *pctinfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
+        IUpdateIdentity *This,
+        UINT iTInfo,
+        LCID lcid,
+        ITypeInfo **ppTInfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
+        IUpdateIdentity *This,
+        REFIID riid,
+        LPOLESTR *rgszNames,
+        UINT cNames,
+        LCID lcid,
+        DISPID *rgDispId);
+
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        IUpdateIdentity *This,
+        DISPID dispIdMember,
+        REFIID riid,
+        LCID lcid,
+        WORD wFlags,
+        DISPPARAMS *pDispParams,
+        VARIANT *pVarResult,
+        EXCEPINFO *pExcepInfo,
+        UINT *puArgErr);
+
+    /*** IUpdateIdentity methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_RevisionNumber)(
+        IUpdateIdentity *This,
+        LONG *retval);
+
+    HRESULT (STDMETHODCALLTYPE *get_UpdateID)(
+        IUpdateIdentity *This,
+        BSTR *retval);
+
+    END_INTERFACE
+} IUpdateIdentityVtbl;
+
+interface IUpdateIdentity {
+    CONST_VTBL IUpdateIdentityVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IUpdateIdentity_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IUpdateIdentity_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IUpdateIdentity_Release(This) (This)->lpVtbl->Release(This)
+/*** IDispatch methods ***/
+#define IUpdateIdentity_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
+#define IUpdateIdentity_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+#define IUpdateIdentity_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+#define IUpdateIdentity_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+/*** IUpdateIdentity methods ***/
+#define IUpdateIdentity_get_RevisionNumber(This,retval) (This)->lpVtbl->get_RevisionNumber(This,retval)
+#define IUpdateIdentity_get_UpdateID(This,retval) (This)->lpVtbl->get_UpdateID(This,retval)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IUpdateIdentity_QueryInterface(IUpdateIdentity* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IUpdateIdentity_AddRef(IUpdateIdentity* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IUpdateIdentity_Release(IUpdateIdentity* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDispatch methods ***/
+static FORCEINLINE HRESULT IUpdateIdentity_GetTypeInfoCount(IUpdateIdentity* This,UINT *pctinfo) {
+    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
+}
+static FORCEINLINE HRESULT IUpdateIdentity_GetTypeInfo(IUpdateIdentity* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
+    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
+}
+static FORCEINLINE HRESULT IUpdateIdentity_GetIDsOfNames(IUpdateIdentity* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
+    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
+}
+static FORCEINLINE HRESULT IUpdateIdentity_Invoke(IUpdateIdentity* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
+    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
+}
+/*** IUpdateIdentity methods ***/
+static FORCEINLINE HRESULT IUpdateIdentity_get_RevisionNumber(IUpdateIdentity* This,LONG *retval) {
+    return This->lpVtbl->get_RevisionNumber(This,retval);
+}
+static FORCEINLINE HRESULT IUpdateIdentity_get_UpdateID(IUpdateIdentity* This,BSTR *retval) {
+    return This->lpVtbl->get_UpdateID(This,retval);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IUpdateIdentity_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IInstallationBehavior interface
+ */
+#ifndef __IInstallationBehavior_INTERFACE_DEFINED__
+#define __IInstallationBehavior_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IInstallationBehavior, 0xd9a59339, 0xe245, 0x4dbd, 0x96,0x86, 0x4d,0x57,0x63,0xe3,0x96,0x24);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("d9a59339-e245-4dbd-9686-4d5763e39624")
+IInstallationBehavior : public IDispatch
+{
+    virtual HRESULT STDMETHODCALLTYPE get_CanRequestUserInput(
+        VARIANT_BOOL *retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_Impact(
+        InstallationImpact *retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_RebootBehavior(
+        InstallationRebootBehavior *retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_RequiresNetworkConnectivity(
+        VARIANT_BOOL *retval) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IInstallationBehavior, 0xd9a59339, 0xe245, 0x4dbd, 0x96,0x86, 0x4d,0x57,0x63,0xe3,0x96,0x24)
+#endif
+#else
+typedef struct IInstallationBehaviorVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IInstallationBehavior *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IInstallationBehavior *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IInstallationBehavior *This);
+
+    /*** IDispatch methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
+        IInstallationBehavior *This,
+        UINT *pctinfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
+        IInstallationBehavior *This,
+        UINT iTInfo,
+        LCID lcid,
+        ITypeInfo **ppTInfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
+        IInstallationBehavior *This,
+        REFIID riid,
+        LPOLESTR *rgszNames,
+        UINT cNames,
+        LCID lcid,
+        DISPID *rgDispId);
+
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        IInstallationBehavior *This,
+        DISPID dispIdMember,
+        REFIID riid,
+        LCID lcid,
+        WORD wFlags,
+        DISPPARAMS *pDispParams,
+        VARIANT *pVarResult,
+        EXCEPINFO *pExcepInfo,
+        UINT *puArgErr);
+
+    /*** IInstallationBehavior methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_CanRequestUserInput)(
+        IInstallationBehavior *This,
+        VARIANT_BOOL *retval);
+
+    HRESULT (STDMETHODCALLTYPE *get_Impact)(
+        IInstallationBehavior *This,
+        InstallationImpact *retval);
+
+    HRESULT (STDMETHODCALLTYPE *get_RebootBehavior)(
+        IInstallationBehavior *This,
+        InstallationRebootBehavior *retval);
+
+    HRESULT (STDMETHODCALLTYPE *get_RequiresNetworkConnectivity)(
+        IInstallationBehavior *This,
+        VARIANT_BOOL *retval);
+
+    END_INTERFACE
+} IInstallationBehaviorVtbl;
+
+interface IInstallationBehavior {
+    CONST_VTBL IInstallationBehaviorVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IInstallationBehavior_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IInstallationBehavior_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IInstallationBehavior_Release(This) (This)->lpVtbl->Release(This)
+/*** IDispatch methods ***/
+#define IInstallationBehavior_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
+#define IInstallationBehavior_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+#define IInstallationBehavior_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+#define IInstallationBehavior_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+/*** IInstallationBehavior methods ***/
+#define IInstallationBehavior_get_CanRequestUserInput(This,retval) (This)->lpVtbl->get_CanRequestUserInput(This,retval)
+#define IInstallationBehavior_get_Impact(This,retval) (This)->lpVtbl->get_Impact(This,retval)
+#define IInstallationBehavior_get_RebootBehavior(This,retval) (This)->lpVtbl->get_RebootBehavior(This,retval)
+#define IInstallationBehavior_get_RequiresNetworkConnectivity(This,retval) (This)->lpVtbl->get_RequiresNetworkConnectivity(This,retval)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IInstallationBehavior_QueryInterface(IInstallationBehavior* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IInstallationBehavior_AddRef(IInstallationBehavior* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IInstallationBehavior_Release(IInstallationBehavior* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDispatch methods ***/
+static FORCEINLINE HRESULT IInstallationBehavior_GetTypeInfoCount(IInstallationBehavior* This,UINT *pctinfo) {
+    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
+}
+static FORCEINLINE HRESULT IInstallationBehavior_GetTypeInfo(IInstallationBehavior* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
+    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
+}
+static FORCEINLINE HRESULT IInstallationBehavior_GetIDsOfNames(IInstallationBehavior* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
+    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
+}
+static FORCEINLINE HRESULT IInstallationBehavior_Invoke(IInstallationBehavior* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
+    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
+}
+/*** IInstallationBehavior methods ***/
+static FORCEINLINE HRESULT IInstallationBehavior_get_CanRequestUserInput(IInstallationBehavior* This,VARIANT_BOOL *retval) {
+    return This->lpVtbl->get_CanRequestUserInput(This,retval);
+}
+static FORCEINLINE HRESULT IInstallationBehavior_get_Impact(IInstallationBehavior* This,InstallationImpact *retval) {
+    return This->lpVtbl->get_Impact(This,retval);
+}
+static FORCEINLINE HRESULT IInstallationBehavior_get_RebootBehavior(IInstallationBehavior* This,InstallationRebootBehavior *retval) {
+    return This->lpVtbl->get_RebootBehavior(This,retval);
+}
+static FORCEINLINE HRESULT IInstallationBehavior_get_RequiresNetworkConnectivity(IInstallationBehavior* This,VARIANT_BOOL *retval) {
+    return This->lpVtbl->get_RequiresNetworkConnectivity(This,retval);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IInstallationBehavior_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IUpdateDownloadContent interface
+ */
+#ifndef __IUpdateDownloadContent_INTERFACE_DEFINED__
+#define __IUpdateDownloadContent_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IUpdateDownloadContent, 0x54a2cb2d, 0x9a0c, 0x48b6, 0x8a,0x50, 0x9a,0xbb,0x69,0xee,0x2d,0x02);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("54a2cb2d-9a0c-48b6-8a50-9abb69ee2d02")
+IUpdateDownloadContent : public IDispatch
+{
+    virtual HRESULT STDMETHODCALLTYPE get_DownloadUrl(
+        BSTR *retval) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IUpdateDownloadContent, 0x54a2cb2d, 0x9a0c, 0x48b6, 0x8a,0x50, 0x9a,0xbb,0x69,0xee,0x2d,0x02)
+#endif
+#else
+typedef struct IUpdateDownloadContentVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IUpdateDownloadContent *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IUpdateDownloadContent *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IUpdateDownloadContent *This);
+
+    /*** IDispatch methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
+        IUpdateDownloadContent *This,
+        UINT *pctinfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
+        IUpdateDownloadContent *This,
+        UINT iTInfo,
+        LCID lcid,
+        ITypeInfo **ppTInfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
+        IUpdateDownloadContent *This,
+        REFIID riid,
+        LPOLESTR *rgszNames,
+        UINT cNames,
+        LCID lcid,
+        DISPID *rgDispId);
+
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        IUpdateDownloadContent *This,
+        DISPID dispIdMember,
+        REFIID riid,
+        LCID lcid,
+        WORD wFlags,
+        DISPPARAMS *pDispParams,
+        VARIANT *pVarResult,
+        EXCEPINFO *pExcepInfo,
+        UINT *puArgErr);
+
+    /*** IUpdateDownloadContent methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_DownloadUrl)(
+        IUpdateDownloadContent *This,
+        BSTR *retval);
+
+    END_INTERFACE
+} IUpdateDownloadContentVtbl;
+
+interface IUpdateDownloadContent {
+    CONST_VTBL IUpdateDownloadContentVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IUpdateDownloadContent_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IUpdateDownloadContent_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IUpdateDownloadContent_Release(This) (This)->lpVtbl->Release(This)
+/*** IDispatch methods ***/
+#define IUpdateDownloadContent_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
+#define IUpdateDownloadContent_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+#define IUpdateDownloadContent_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+#define IUpdateDownloadContent_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+/*** IUpdateDownloadContent methods ***/
+#define IUpdateDownloadContent_get_DownloadUrl(This,retval) (This)->lpVtbl->get_DownloadUrl(This,retval)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IUpdateDownloadContent_QueryInterface(IUpdateDownloadContent* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IUpdateDownloadContent_AddRef(IUpdateDownloadContent* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IUpdateDownloadContent_Release(IUpdateDownloadContent* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDispatch methods ***/
+static FORCEINLINE HRESULT IUpdateDownloadContent_GetTypeInfoCount(IUpdateDownloadContent* This,UINT *pctinfo) {
+    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
+}
+static FORCEINLINE HRESULT IUpdateDownloadContent_GetTypeInfo(IUpdateDownloadContent* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
+    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
+}
+static FORCEINLINE HRESULT IUpdateDownloadContent_GetIDsOfNames(IUpdateDownloadContent* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
+    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
+}
+static FORCEINLINE HRESULT IUpdateDownloadContent_Invoke(IUpdateDownloadContent* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
+    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
+}
+/*** IUpdateDownloadContent methods ***/
+static FORCEINLINE HRESULT IUpdateDownloadContent_get_DownloadUrl(IUpdateDownloadContent* This,BSTR *retval) {
+    return This->lpVtbl->get_DownloadUrl(This,retval);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IUpdateDownloadContent_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IUpdateDownloadContentCollection interface
+ */
+#ifndef __IUpdateDownloadContentCollection_INTERFACE_DEFINED__
+#define __IUpdateDownloadContentCollection_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IUpdateDownloadContentCollection, 0xbc5513c8, 0xb3b8, 0x4bf7, 0xa4,0xd4, 0x36,0x1c,0x0d,0x8c,0x88,0xba);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("bc5513c8-b3b8-4bf7-a4d4-361c0d8c88ba")
+IUpdateDownloadContentCollection : public IDispatch
+{
+    virtual HRESULT STDMETHODCALLTYPE get_Item(
+        LONG index,
+        IUpdateDownloadContent **retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get__NewEnum(
+        IUnknown **retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_Count(
+        LONG *retval) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IUpdateDownloadContentCollection, 0xbc5513c8, 0xb3b8, 0x4bf7, 0xa4,0xd4, 0x36,0x1c,0x0d,0x8c,0x88,0xba)
+#endif
+#else
+typedef struct IUpdateDownloadContentCollectionVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IUpdateDownloadContentCollection *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IUpdateDownloadContentCollection *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IUpdateDownloadContentCollection *This);
+
+    /*** IDispatch methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
+        IUpdateDownloadContentCollection *This,
+        UINT *pctinfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
+        IUpdateDownloadContentCollection *This,
+        UINT iTInfo,
+        LCID lcid,
+        ITypeInfo **ppTInfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
+        IUpdateDownloadContentCollection *This,
+        REFIID riid,
+        LPOLESTR *rgszNames,
+        UINT cNames,
+        LCID lcid,
+        DISPID *rgDispId);
+
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        IUpdateDownloadContentCollection *This,
+        DISPID dispIdMember,
+        REFIID riid,
+        LCID lcid,
+        WORD wFlags,
+        DISPPARAMS *pDispParams,
+        VARIANT *pVarResult,
+        EXCEPINFO *pExcepInfo,
+        UINT *puArgErr);
+
+    /*** IUpdateDownloadContentCollection methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_Item)(
+        IUpdateDownloadContentCollection *This,
+        LONG index,
+        IUpdateDownloadContent **retval);
+
+    HRESULT (STDMETHODCALLTYPE *get__NewEnum)(
+        IUpdateDownloadContentCollection *This,
+        IUnknown **retval);
+
+    HRESULT (STDMETHODCALLTYPE *get_Count)(
+        IUpdateDownloadContentCollection *This,
+        LONG *retval);
+
+    END_INTERFACE
+} IUpdateDownloadContentCollectionVtbl;
+
+interface IUpdateDownloadContentCollection {
+    CONST_VTBL IUpdateDownloadContentCollectionVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IUpdateDownloadContentCollection_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IUpdateDownloadContentCollection_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IUpdateDownloadContentCollection_Release(This) (This)->lpVtbl->Release(This)
+/*** IDispatch methods ***/
+#define IUpdateDownloadContentCollection_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
+#define IUpdateDownloadContentCollection_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+#define IUpdateDownloadContentCollection_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+#define IUpdateDownloadContentCollection_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+/*** IUpdateDownloadContentCollection methods ***/
+#define IUpdateDownloadContentCollection_get_Item(This,index,retval) (This)->lpVtbl->get_Item(This,index,retval)
+#define IUpdateDownloadContentCollection_get__NewEnum(This,retval) (This)->lpVtbl->get__NewEnum(This,retval)
+#define IUpdateDownloadContentCollection_get_Count(This,retval) (This)->lpVtbl->get_Count(This,retval)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IUpdateDownloadContentCollection_QueryInterface(IUpdateDownloadContentCollection* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IUpdateDownloadContentCollection_AddRef(IUpdateDownloadContentCollection* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IUpdateDownloadContentCollection_Release(IUpdateDownloadContentCollection* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDispatch methods ***/
+static FORCEINLINE HRESULT IUpdateDownloadContentCollection_GetTypeInfoCount(IUpdateDownloadContentCollection* This,UINT *pctinfo) {
+    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
+}
+static FORCEINLINE HRESULT IUpdateDownloadContentCollection_GetTypeInfo(IUpdateDownloadContentCollection* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
+    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
+}
+static FORCEINLINE HRESULT IUpdateDownloadContentCollection_GetIDsOfNames(IUpdateDownloadContentCollection* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
+    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
+}
+static FORCEINLINE HRESULT IUpdateDownloadContentCollection_Invoke(IUpdateDownloadContentCollection* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
+    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
+}
+/*** IUpdateDownloadContentCollection methods ***/
+static FORCEINLINE HRESULT IUpdateDownloadContentCollection_get_Item(IUpdateDownloadContentCollection* This,LONG index,IUpdateDownloadContent **retval) {
+    return This->lpVtbl->get_Item(This,index,retval);
+}
+static FORCEINLINE HRESULT IUpdateDownloadContentCollection_get__NewEnum(IUpdateDownloadContentCollection* This,IUnknown **retval) {
+    return This->lpVtbl->get__NewEnum(This,retval);
+}
+static FORCEINLINE HRESULT IUpdateDownloadContentCollection_get_Count(IUpdateDownloadContentCollection* This,LONG *retval) {
+    return This->lpVtbl->get_Count(This,retval);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IUpdateDownloadContentCollection_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IUpdate interface
+ */
+#ifndef __IUpdate_INTERFACE_DEFINED__
+#define __IUpdate_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IUpdate, 0x6a92b07a, 0xd821, 0x4682, 0xb4,0x23, 0x5c,0x80,0x50,0x22,0xcc,0x4d);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("6a92b07a-d821-4682-b423-5c805022cc4d")
+IUpdate : public IDispatch
+{
+    virtual HRESULT STDMETHODCALLTYPE get_Title(
+        BSTR *retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_AutoSelectOnWebSites(
+        VARIANT_BOOL *retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_BundledUpdates(
+        IUpdateCollection **retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_CanRequireSource(
+        VARIANT_BOOL *retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_Categories(
+        ICategoryCollection **retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_Deadline(
+        VARIANT *retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_DeltaCompressedContentAvailable(
+        VARIANT_BOOL *retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_DeltaCompressedContentPreferred(
+        VARIANT_BOOL *retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_Description(
+        BSTR *retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_EulaAccepted(
+        VARIANT_BOOL *retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_EulaText(
+        BSTR *retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_HandlerID(
+        BSTR *retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_Identity(
+        IUpdateIdentity **retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_Image(
+        IImageInformation **retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_InstallationBehavior(
+        IInstallationBehavior **retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_IsBeta(
+        VARIANT_BOOL *retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_IsDownloaded(
+        VARIANT_BOOL *retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_IsHidden(
+        VARIANT_BOOL *retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_IsHidden(
+        VARIANT_BOOL value) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_IsInstalled(
+        VARIANT_BOOL *retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_IsMandatory(
+        VARIANT_BOOL *retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_IsUninstallable(
+        VARIANT_BOOL *retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_Languages(
+        IStringCollection **retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_LastDeploymentChangeTime(
+        DATE *retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_MaxDownloadSize(
+        DECIMAL *retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_MinDownloadSize(
+        DECIMAL *retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_MoreInfoUrls(
+        IStringCollection **retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_MsrcSeverity(
+        BSTR *retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_RecommendedCpuSpeed(
+        LONG *retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_RecommendedHardDiskSpace(
+        LONG *retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_RecommendedMemory(
+        LONG *retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_ReleaseNotes(
+        BSTR *retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_SecurityBulletinIDs(
+        IStringCollection **retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_SupersededUpdateIDs(
+        IStringCollection **retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_SupportUrl(
+        BSTR *retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_Type(
+        UpdateType *retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_UninstallationNotes(
+        BSTR *retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_UninstallationBehavior(
+        IInstallationBehavior **retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_UninstallationSteps(
+        IStringCollection **retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_KBArticleIDs(
+        IStringCollection **retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE AcceptEula(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_DeploymentAction(
+        DeploymentAction *retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CopyFromCache(
+        BSTR path,
+        VARIANT_BOOL toExtractCabFiles) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_DownloadPriority(
+        DownloadPriority *retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_DownloadContents(
+        IUpdateDownloadContentCollection **retval) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IUpdate, 0x6a92b07a, 0xd821, 0x4682, 0xb4,0x23, 0x5c,0x80,0x50,0x22,0xcc,0x4d)
+#endif
+#else
+typedef struct IUpdateVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IUpdate *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IUpdate *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IUpdate *This);
+
+    /*** IDispatch methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
+        IUpdate *This,
+        UINT *pctinfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
+        IUpdate *This,
+        UINT iTInfo,
+        LCID lcid,
+        ITypeInfo **ppTInfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
+        IUpdate *This,
+        REFIID riid,
+        LPOLESTR *rgszNames,
+        UINT cNames,
+        LCID lcid,
+        DISPID *rgDispId);
+
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        IUpdate *This,
+        DISPID dispIdMember,
+        REFIID riid,
+        LCID lcid,
+        WORD wFlags,
+        DISPPARAMS *pDispParams,
+        VARIANT *pVarResult,
+        EXCEPINFO *pExcepInfo,
+        UINT *puArgErr);
+
+    /*** IUpdate methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_Title)(
+        IUpdate *This,
+        BSTR *retval);
+
+    HRESULT (STDMETHODCALLTYPE *get_AutoSelectOnWebSites)(
+        IUpdate *This,
+        VARIANT_BOOL *retval);
+
+    HRESULT (STDMETHODCALLTYPE *get_BundledUpdates)(
+        IUpdate *This,
+        IUpdateCollection **retval);
+
+    HRESULT (STDMETHODCALLTYPE *get_CanRequireSource)(
+        IUpdate *This,
+        VARIANT_BOOL *retval);
+
+    HRESULT (STDMETHODCALLTYPE *get_Categories)(
+        IUpdate *This,
+        ICategoryCollection **retval);
+
+    HRESULT (STDMETHODCALLTYPE *get_Deadline)(
+        IUpdate *This,
+        VARIANT *retval);
+
+    HRESULT (STDMETHODCALLTYPE *get_DeltaCompressedContentAvailable)(
+        IUpdate *This,
+        VARIANT_BOOL *retval);
+
+    HRESULT (STDMETHODCALLTYPE *get_DeltaCompressedContentPreferred)(
+        IUpdate *This,
+        VARIANT_BOOL *retval);
+
+    HRESULT (STDMETHODCALLTYPE *get_Description)(
+        IUpdate *This,
+        BSTR *retval);
+
+    HRESULT (STDMETHODCALLTYPE *get_EulaAccepted)(
+        IUpdate *This,
+        VARIANT_BOOL *retval);
+
+    HRESULT (STDMETHODCALLTYPE *get_EulaText)(
+        IUpdate *This,
+        BSTR *retval);
+
+    HRESULT (STDMETHODCALLTYPE *get_HandlerID)(
+        IUpdate *This,
+        BSTR *retval);
+
+    HRESULT (STDMETHODCALLTYPE *get_Identity)(
+        IUpdate *This,
+        IUpdateIdentity **retval);
+
+    HRESULT (STDMETHODCALLTYPE *get_Image)(
+        IUpdate *This,
+        IImageInformation **retval);
+
+    HRESULT (STDMETHODCALLTYPE *get_InstallationBehavior)(
+        IUpdate *This,
+        IInstallationBehavior **retval);
+
+    HRESULT (STDMETHODCALLTYPE *get_IsBeta)(
+        IUpdate *This,
+        VARIANT_BOOL *retval);
+
+    HRESULT (STDMETHODCALLTYPE *get_IsDownloaded)(
+        IUpdate *This,
+        VARIANT_BOOL *retval);
+
+    HRESULT (STDMETHODCALLTYPE *get_IsHidden)(
+        IUpdate *This,
+        VARIANT_BOOL *retval);
+
+    HRESULT (STDMETHODCALLTYPE *put_IsHidden)(
+        IUpdate *This,
+        VARIANT_BOOL value);
+
+    HRESULT (STDMETHODCALLTYPE *get_IsInstalled)(
+        IUpdate *This,
+        VARIANT_BOOL *retval);
+
+    HRESULT (STDMETHODCALLTYPE *get_IsMandatory)(
+        IUpdate *This,
+        VARIANT_BOOL *retval);
+
+    HRESULT (STDMETHODCALLTYPE *get_IsUninstallable)(
+        IUpdate *This,
+        VARIANT_BOOL *retval);
+
+    HRESULT (STDMETHODCALLTYPE *get_Languages)(
+        IUpdate *This,
+        IStringCollection **retval);
+
+    HRESULT (STDMETHODCALLTYPE *get_LastDeploymentChangeTime)(
+        IUpdate *This,
+        DATE *retval);
+
+    HRESULT (STDMETHODCALLTYPE *get_MaxDownloadSize)(
+        IUpdate *This,
+        DECIMAL *retval);
+
+    HRESULT (STDMETHODCALLTYPE *get_MinDownloadSize)(
+        IUpdate *This,
+        DECIMAL *retval);
+
+    HRESULT (STDMETHODCALLTYPE *get_MoreInfoUrls)(
+        IUpdate *This,
+        IStringCollection **retval);
+
+    HRESULT (STDMETHODCALLTYPE *get_MsrcSeverity)(
+        IUpdate *This,
+        BSTR *retval);
+
+    HRESULT (STDMETHODCALLTYPE *get_RecommendedCpuSpeed)(
+        IUpdate *This,
+        LONG *retval);
+
+    HRESULT (STDMETHODCALLTYPE *get_RecommendedHardDiskSpace)(
+        IUpdate *This,
+        LONG *retval);
+
+    HRESULT (STDMETHODCALLTYPE *get_RecommendedMemory)(
+        IUpdate *This,
+        LONG *retval);
+
+    HRESULT (STDMETHODCALLTYPE *get_ReleaseNotes)(
+        IUpdate *This,
+        BSTR *retval);
+
+    HRESULT (STDMETHODCALLTYPE *get_SecurityBulletinIDs)(
+        IUpdate *This,
+        IStringCollection **retval);
+
+    HRESULT (STDMETHODCALLTYPE *get_SupersededUpdateIDs)(
+        IUpdate *This,
+        IStringCollection **retval);
+
+    HRESULT (STDMETHODCALLTYPE *get_SupportUrl)(
+        IUpdate *This,
+        BSTR *retval);
+
+    HRESULT (STDMETHODCALLTYPE *get_Type)(
+        IUpdate *This,
+        UpdateType *retval);
+
+    HRESULT (STDMETHODCALLTYPE *get_UninstallationNotes)(
+        IUpdate *This,
+        BSTR *retval);
+
+    HRESULT (STDMETHODCALLTYPE *get_UninstallationBehavior)(
+        IUpdate *This,
+        IInstallationBehavior **retval);
+
+    HRESULT (STDMETHODCALLTYPE *get_UninstallationSteps)(
+        IUpdate *This,
+        IStringCollection **retval);
+
+    HRESULT (STDMETHODCALLTYPE *get_KBArticleIDs)(
+        IUpdate *This,
+        IStringCollection **retval);
+
+    HRESULT (STDMETHODCALLTYPE *AcceptEula)(
+        IUpdate *This);
+
+    HRESULT (STDMETHODCALLTYPE *get_DeploymentAction)(
+        IUpdate *This,
+        DeploymentAction *retval);
+
+    HRESULT (STDMETHODCALLTYPE *CopyFromCache)(
+        IUpdate *This,
+        BSTR path,
+        VARIANT_BOOL toExtractCabFiles);
+
+    HRESULT (STDMETHODCALLTYPE *get_DownloadPriority)(
+        IUpdate *This,
+        DownloadPriority *retval);
+
+    HRESULT (STDMETHODCALLTYPE *get_DownloadContents)(
+        IUpdate *This,
+        IUpdateDownloadContentCollection **retval);
+
+    END_INTERFACE
+} IUpdateVtbl;
+
+interface IUpdate {
+    CONST_VTBL IUpdateVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IUpdate_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IUpdate_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IUpdate_Release(This) (This)->lpVtbl->Release(This)
+/*** IDispatch methods ***/
+#define IUpdate_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
+#define IUpdate_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+#define IUpdate_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+#define IUpdate_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+/*** IUpdate methods ***/
+#define IUpdate_get_Title(This,retval) (This)->lpVtbl->get_Title(This,retval)
+#define IUpdate_get_AutoSelectOnWebSites(This,retval) (This)->lpVtbl->get_AutoSelectOnWebSites(This,retval)
+#define IUpdate_get_BundledUpdates(This,retval) (This)->lpVtbl->get_BundledUpdates(This,retval)
+#define IUpdate_get_CanRequireSource(This,retval) (This)->lpVtbl->get_CanRequireSource(This,retval)
+#define IUpdate_get_Categories(This,retval) (This)->lpVtbl->get_Categories(This,retval)
+#define IUpdate_get_Deadline(This,retval) (This)->lpVtbl->get_Deadline(This,retval)
+#define IUpdate_get_DeltaCompressedContentAvailable(This,retval) (This)->lpVtbl->get_DeltaCompressedContentAvailable(This,retval)
+#define IUpdate_get_DeltaCompressedContentPreferred(This,retval) (This)->lpVtbl->get_DeltaCompressedContentPreferred(This,retval)
+#define IUpdate_get_Description(This,retval) (This)->lpVtbl->get_Description(This,retval)
+#define IUpdate_get_EulaAccepted(This,retval) (This)->lpVtbl->get_EulaAccepted(This,retval)
+#define IUpdate_get_EulaText(This,retval) (This)->lpVtbl->get_EulaText(This,retval)
+#define IUpdate_get_HandlerID(This,retval) (This)->lpVtbl->get_HandlerID(This,retval)
+#define IUpdate_get_Identity(This,retval) (This)->lpVtbl->get_Identity(This,retval)
+#define IUpdate_get_Image(This,retval) (This)->lpVtbl->get_Image(This,retval)
+#define IUpdate_get_InstallationBehavior(This,retval) (This)->lpVtbl->get_InstallationBehavior(This,retval)
+#define IUpdate_get_IsBeta(This,retval) (This)->lpVtbl->get_IsBeta(This,retval)
+#define IUpdate_get_IsDownloaded(This,retval) (This)->lpVtbl->get_IsDownloaded(This,retval)
+#define IUpdate_get_IsHidden(This,retval) (This)->lpVtbl->get_IsHidden(This,retval)
+#define IUpdate_put_IsHidden(This,value) (This)->lpVtbl->put_IsHidden(This,value)
+#define IUpdate_get_IsInstalled(This,retval) (This)->lpVtbl->get_IsInstalled(This,retval)
+#define IUpdate_get_IsMandatory(This,retval) (This)->lpVtbl->get_IsMandatory(This,retval)
+#define IUpdate_get_IsUninstallable(This,retval) (This)->lpVtbl->get_IsUninstallable(This,retval)
+#define IUpdate_get_Languages(This,retval) (This)->lpVtbl->get_Languages(This,retval)
+#define IUpdate_get_LastDeploymentChangeTime(This,retval) (This)->lpVtbl->get_LastDeploymentChangeTime(This,retval)
+#define IUpdate_get_MaxDownloadSize(This,retval) (This)->lpVtbl->get_MaxDownloadSize(This,retval)
+#define IUpdate_get_MinDownloadSize(This,retval) (This)->lpVtbl->get_MinDownloadSize(This,retval)
+#define IUpdate_get_MoreInfoUrls(This,retval) (This)->lpVtbl->get_MoreInfoUrls(This,retval)
+#define IUpdate_get_MsrcSeverity(This,retval) (This)->lpVtbl->get_MsrcSeverity(This,retval)
+#define IUpdate_get_RecommendedCpuSpeed(This,retval) (This)->lpVtbl->get_RecommendedCpuSpeed(This,retval)
+#define IUpdate_get_RecommendedHardDiskSpace(This,retval) (This)->lpVtbl->get_RecommendedHardDiskSpace(This,retval)
+#define IUpdate_get_RecommendedMemory(This,retval) (This)->lpVtbl->get_RecommendedMemory(This,retval)
+#define IUpdate_get_ReleaseNotes(This,retval) (This)->lpVtbl->get_ReleaseNotes(This,retval)
+#define IUpdate_get_SecurityBulletinIDs(This,retval) (This)->lpVtbl->get_SecurityBulletinIDs(This,retval)
+#define IUpdate_get_SupersededUpdateIDs(This,retval) (This)->lpVtbl->get_SupersededUpdateIDs(This,retval)
+#define IUpdate_get_SupportUrl(This,retval) (This)->lpVtbl->get_SupportUrl(This,retval)
+#define IUpdate_get_Type(This,retval) (This)->lpVtbl->get_Type(This,retval)
+#define IUpdate_get_UninstallationNotes(This,retval) (This)->lpVtbl->get_UninstallationNotes(This,retval)
+#define IUpdate_get_UninstallationBehavior(This,retval) (This)->lpVtbl->get_UninstallationBehavior(This,retval)
+#define IUpdate_get_UninstallationSteps(This,retval) (This)->lpVtbl->get_UninstallationSteps(This,retval)
+#define IUpdate_get_KBArticleIDs(This,retval) (This)->lpVtbl->get_KBArticleIDs(This,retval)
+#define IUpdate_AcceptEula(This) (This)->lpVtbl->AcceptEula(This)
+#define IUpdate_get_DeploymentAction(This,retval) (This)->lpVtbl->get_DeploymentAction(This,retval)
+#define IUpdate_CopyFromCache(This,path,toExtractCabFiles) (This)->lpVtbl->CopyFromCache(This,path,toExtractCabFiles)
+#define IUpdate_get_DownloadPriority(This,retval) (This)->lpVtbl->get_DownloadPriority(This,retval)
+#define IUpdate_get_DownloadContents(This,retval) (This)->lpVtbl->get_DownloadContents(This,retval)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IUpdate_QueryInterface(IUpdate* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IUpdate_AddRef(IUpdate* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IUpdate_Release(IUpdate* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDispatch methods ***/
+static FORCEINLINE HRESULT IUpdate_GetTypeInfoCount(IUpdate* This,UINT *pctinfo) {
+    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
+}
+static FORCEINLINE HRESULT IUpdate_GetTypeInfo(IUpdate* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
+    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
+}
+static FORCEINLINE HRESULT IUpdate_GetIDsOfNames(IUpdate* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
+    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
+}
+static FORCEINLINE HRESULT IUpdate_Invoke(IUpdate* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
+    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
+}
+/*** IUpdate methods ***/
+static FORCEINLINE HRESULT IUpdate_get_Title(IUpdate* This,BSTR *retval) {
+    return This->lpVtbl->get_Title(This,retval);
+}
+static FORCEINLINE HRESULT IUpdate_get_AutoSelectOnWebSites(IUpdate* This,VARIANT_BOOL *retval) {
+    return This->lpVtbl->get_AutoSelectOnWebSites(This,retval);
+}
+static FORCEINLINE HRESULT IUpdate_get_BundledUpdates(IUpdate* This,IUpdateCollection **retval) {
+    return This->lpVtbl->get_BundledUpdates(This,retval);
+}
+static FORCEINLINE HRESULT IUpdate_get_CanRequireSource(IUpdate* This,VARIANT_BOOL *retval) {
+    return This->lpVtbl->get_CanRequireSource(This,retval);
+}
+static FORCEINLINE HRESULT IUpdate_get_Categories(IUpdate* This,ICategoryCollection **retval) {
+    return This->lpVtbl->get_Categories(This,retval);
+}
+static FORCEINLINE HRESULT IUpdate_get_Deadline(IUpdate* This,VARIANT *retval) {
+    return This->lpVtbl->get_Deadline(This,retval);
+}
+static FORCEINLINE HRESULT IUpdate_get_DeltaCompressedContentAvailable(IUpdate* This,VARIANT_BOOL *retval) {
+    return This->lpVtbl->get_DeltaCompressedContentAvailable(This,retval);
+}
+static FORCEINLINE HRESULT IUpdate_get_DeltaCompressedContentPreferred(IUpdate* This,VARIANT_BOOL *retval) {
+    return This->lpVtbl->get_DeltaCompressedContentPreferred(This,retval);
+}
+static FORCEINLINE HRESULT IUpdate_get_Description(IUpdate* This,BSTR *retval) {
+    return This->lpVtbl->get_Description(This,retval);
+}
+static FORCEINLINE HRESULT IUpdate_get_EulaAccepted(IUpdate* This,VARIANT_BOOL *retval) {
+    return This->lpVtbl->get_EulaAccepted(This,retval);
+}
+static FORCEINLINE HRESULT IUpdate_get_EulaText(IUpdate* This,BSTR *retval) {
+    return This->lpVtbl->get_EulaText(This,retval);
+}
+static FORCEINLINE HRESULT IUpdate_get_HandlerID(IUpdate* This,BSTR *retval) {
+    return This->lpVtbl->get_HandlerID(This,retval);
+}
+static FORCEINLINE HRESULT IUpdate_get_Identity(IUpdate* This,IUpdateIdentity **retval) {
+    return This->lpVtbl->get_Identity(This,retval);
+}
+static FORCEINLINE HRESULT IUpdate_get_Image(IUpdate* This,IImageInformation **retval) {
+    return This->lpVtbl->get_Image(This,retval);
+}
+static FORCEINLINE HRESULT IUpdate_get_InstallationBehavior(IUpdate* This,IInstallationBehavior **retval) {
+    return This->lpVtbl->get_InstallationBehavior(This,retval);
+}
+static FORCEINLINE HRESULT IUpdate_get_IsBeta(IUpdate* This,VARIANT_BOOL *retval) {
+    return This->lpVtbl->get_IsBeta(This,retval);
+}
+static FORCEINLINE HRESULT IUpdate_get_IsDownloaded(IUpdate* This,VARIANT_BOOL *retval) {
+    return This->lpVtbl->get_IsDownloaded(This,retval);
+}
+static FORCEINLINE HRESULT IUpdate_get_IsHidden(IUpdate* This,VARIANT_BOOL *retval) {
+    return This->lpVtbl->get_IsHidden(This,retval);
+}
+static FORCEINLINE HRESULT IUpdate_put_IsHidden(IUpdate* This,VARIANT_BOOL value) {
+    return This->lpVtbl->put_IsHidden(This,value);
+}
+static FORCEINLINE HRESULT IUpdate_get_IsInstalled(IUpdate* This,VARIANT_BOOL *retval) {
+    return This->lpVtbl->get_IsInstalled(This,retval);
+}
+static FORCEINLINE HRESULT IUpdate_get_IsMandatory(IUpdate* This,VARIANT_BOOL *retval) {
+    return This->lpVtbl->get_IsMandatory(This,retval);
+}
+static FORCEINLINE HRESULT IUpdate_get_IsUninstallable(IUpdate* This,VARIANT_BOOL *retval) {
+    return This->lpVtbl->get_IsUninstallable(This,retval);
+}
+static FORCEINLINE HRESULT IUpdate_get_Languages(IUpdate* This,IStringCollection **retval) {
+    return This->lpVtbl->get_Languages(This,retval);
+}
+static FORCEINLINE HRESULT IUpdate_get_LastDeploymentChangeTime(IUpdate* This,DATE *retval) {
+    return This->lpVtbl->get_LastDeploymentChangeTime(This,retval);
+}
+static FORCEINLINE HRESULT IUpdate_get_MaxDownloadSize(IUpdate* This,DECIMAL *retval) {
+    return This->lpVtbl->get_MaxDownloadSize(This,retval);
+}
+static FORCEINLINE HRESULT IUpdate_get_MinDownloadSize(IUpdate* This,DECIMAL *retval) {
+    return This->lpVtbl->get_MinDownloadSize(This,retval);
+}
+static FORCEINLINE HRESULT IUpdate_get_MoreInfoUrls(IUpdate* This,IStringCollection **retval) {
+    return This->lpVtbl->get_MoreInfoUrls(This,retval);
+}
+static FORCEINLINE HRESULT IUpdate_get_MsrcSeverity(IUpdate* This,BSTR *retval) {
+    return This->lpVtbl->get_MsrcSeverity(This,retval);
+}
+static FORCEINLINE HRESULT IUpdate_get_RecommendedCpuSpeed(IUpdate* This,LONG *retval) {
+    return This->lpVtbl->get_RecommendedCpuSpeed(This,retval);
+}
+static FORCEINLINE HRESULT IUpdate_get_RecommendedHardDiskSpace(IUpdate* This,LONG *retval) {
+    return This->lpVtbl->get_RecommendedHardDiskSpace(This,retval);
+}
+static FORCEINLINE HRESULT IUpdate_get_RecommendedMemory(IUpdate* This,LONG *retval) {
+    return This->lpVtbl->get_RecommendedMemory(This,retval);
+}
+static FORCEINLINE HRESULT IUpdate_get_ReleaseNotes(IUpdate* This,BSTR *retval) {
+    return This->lpVtbl->get_ReleaseNotes(This,retval);
+}
+static FORCEINLINE HRESULT IUpdate_get_SecurityBulletinIDs(IUpdate* This,IStringCollection **retval) {
+    return This->lpVtbl->get_SecurityBulletinIDs(This,retval);
+}
+static FORCEINLINE HRESULT IUpdate_get_SupersededUpdateIDs(IUpdate* This,IStringCollection **retval) {
+    return This->lpVtbl->get_SupersededUpdateIDs(This,retval);
+}
+static FORCEINLINE HRESULT IUpdate_get_SupportUrl(IUpdate* This,BSTR *retval) {
+    return This->lpVtbl->get_SupportUrl(This,retval);
+}
+static FORCEINLINE HRESULT IUpdate_get_Type(IUpdate* This,UpdateType *retval) {
+    return This->lpVtbl->get_Type(This,retval);
+}
+static FORCEINLINE HRESULT IUpdate_get_UninstallationNotes(IUpdate* This,BSTR *retval) {
+    return This->lpVtbl->get_UninstallationNotes(This,retval);
+}
+static FORCEINLINE HRESULT IUpdate_get_UninstallationBehavior(IUpdate* This,IInstallationBehavior **retval) {
+    return This->lpVtbl->get_UninstallationBehavior(This,retval);
+}
+static FORCEINLINE HRESULT IUpdate_get_UninstallationSteps(IUpdate* This,IStringCollection **retval) {
+    return This->lpVtbl->get_UninstallationSteps(This,retval);
+}
+static FORCEINLINE HRESULT IUpdate_get_KBArticleIDs(IUpdate* This,IStringCollection **retval) {
+    return This->lpVtbl->get_KBArticleIDs(This,retval);
+}
+static FORCEINLINE HRESULT IUpdate_AcceptEula(IUpdate* This) {
+    return This->lpVtbl->AcceptEula(This);
+}
+static FORCEINLINE HRESULT IUpdate_get_DeploymentAction(IUpdate* This,DeploymentAction *retval) {
+    return This->lpVtbl->get_DeploymentAction(This,retval);
+}
+static FORCEINLINE HRESULT IUpdate_CopyFromCache(IUpdate* This,BSTR path,VARIANT_BOOL toExtractCabFiles) {
+    return This->lpVtbl->CopyFromCache(This,path,toExtractCabFiles);
+}
+static FORCEINLINE HRESULT IUpdate_get_DownloadPriority(IUpdate* This,DownloadPriority *retval) {
+    return This->lpVtbl->get_DownloadPriority(This,retval);
+}
+static FORCEINLINE HRESULT IUpdate_get_DownloadContents(IUpdate* This,IUpdateDownloadContentCollection **retval) {
+    return This->lpVtbl->get_DownloadContents(This,retval);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IUpdate_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IUpdateCollection interface
+ */
+#ifndef __IUpdateCollection_INTERFACE_DEFINED__
+#define __IUpdateCollection_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IUpdateCollection, 0x07f7438c, 0x7709, 0x4ca5, 0xb5,0x18, 0x91,0x27,0x92,0x88,0x13,0x4e);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("07f7438c-7709-4ca5-b518-91279288134e")
+IUpdateCollection : public IDispatch
+{
+    virtual HRESULT STDMETHODCALLTYPE get_Item(
+        LONG index,
+        IUpdate **retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_Item(
+        LONG index,
+        IUpdate *value) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get__NewEnum(
+        IUnknown **retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_Count(
+        LONG *retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_ReadOnly(
+        VARIANT_BOOL *retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Add(
+        IUpdate *value,
+        LONG *retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Clear(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Copy(
+        IUpdateCollection **retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Insert(
+        LONG index,
+        IUpdate *value) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE RemoveAt(
+        LONG index) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IUpdateCollection, 0x07f7438c, 0x7709, 0x4ca5, 0xb5,0x18, 0x91,0x27,0x92,0x88,0x13,0x4e)
+#endif
+#else
+typedef struct IUpdateCollectionVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IUpdateCollection *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IUpdateCollection *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IUpdateCollection *This);
+
+    /*** IDispatch methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
+        IUpdateCollection *This,
+        UINT *pctinfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
+        IUpdateCollection *This,
+        UINT iTInfo,
+        LCID lcid,
+        ITypeInfo **ppTInfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
+        IUpdateCollection *This,
+        REFIID riid,
+        LPOLESTR *rgszNames,
+        UINT cNames,
+        LCID lcid,
+        DISPID *rgDispId);
+
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        IUpdateCollection *This,
+        DISPID dispIdMember,
+        REFIID riid,
+        LCID lcid,
+        WORD wFlags,
+        DISPPARAMS *pDispParams,
+        VARIANT *pVarResult,
+        EXCEPINFO *pExcepInfo,
+        UINT *puArgErr);
+
+    /*** IUpdateCollection methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_Item)(
+        IUpdateCollection *This,
+        LONG index,
+        IUpdate **retval);
+
+    HRESULT (STDMETHODCALLTYPE *put_Item)(
+        IUpdateCollection *This,
+        LONG index,
+        IUpdate *value);
+
+    HRESULT (STDMETHODCALLTYPE *get__NewEnum)(
+        IUpdateCollection *This,
+        IUnknown **retval);
+
+    HRESULT (STDMETHODCALLTYPE *get_Count)(
+        IUpdateCollection *This,
+        LONG *retval);
+
+    HRESULT (STDMETHODCALLTYPE *get_ReadOnly)(
+        IUpdateCollection *This,
+        VARIANT_BOOL *retval);
+
+    HRESULT (STDMETHODCALLTYPE *Add)(
+        IUpdateCollection *This,
+        IUpdate *value,
+        LONG *retval);
+
+    HRESULT (STDMETHODCALLTYPE *Clear)(
+        IUpdateCollection *This);
+
+    HRESULT (STDMETHODCALLTYPE *Copy)(
+        IUpdateCollection *This,
+        IUpdateCollection **retval);
+
+    HRESULT (STDMETHODCALLTYPE *Insert)(
+        IUpdateCollection *This,
+        LONG index,
+        IUpdate *value);
+
+    HRESULT (STDMETHODCALLTYPE *RemoveAt)(
+        IUpdateCollection *This,
+        LONG index);
+
+    END_INTERFACE
+} IUpdateCollectionVtbl;
+
+interface IUpdateCollection {
+    CONST_VTBL IUpdateCollectionVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IUpdateCollection_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IUpdateCollection_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IUpdateCollection_Release(This) (This)->lpVtbl->Release(This)
+/*** IDispatch methods ***/
+#define IUpdateCollection_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
+#define IUpdateCollection_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+#define IUpdateCollection_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+#define IUpdateCollection_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+/*** IUpdateCollection methods ***/
+#define IUpdateCollection_get_Item(This,index,retval) (This)->lpVtbl->get_Item(This,index,retval)
+#define IUpdateCollection_put_Item(This,index,value) (This)->lpVtbl->put_Item(This,index,value)
+#define IUpdateCollection_get__NewEnum(This,retval) (This)->lpVtbl->get__NewEnum(This,retval)
+#define IUpdateCollection_get_Count(This,retval) (This)->lpVtbl->get_Count(This,retval)
+#define IUpdateCollection_get_ReadOnly(This,retval) (This)->lpVtbl->get_ReadOnly(This,retval)
+#define IUpdateCollection_Add(This,value,retval) (This)->lpVtbl->Add(This,value,retval)
+#define IUpdateCollection_Clear(This) (This)->lpVtbl->Clear(This)
+#define IUpdateCollection_Copy(This,retval) (This)->lpVtbl->Copy(This,retval)
+#define IUpdateCollection_Insert(This,index,value) (This)->lpVtbl->Insert(This,index,value)
+#define IUpdateCollection_RemoveAt(This,index) (This)->lpVtbl->RemoveAt(This,index)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IUpdateCollection_QueryInterface(IUpdateCollection* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IUpdateCollection_AddRef(IUpdateCollection* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IUpdateCollection_Release(IUpdateCollection* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDispatch methods ***/
+static FORCEINLINE HRESULT IUpdateCollection_GetTypeInfoCount(IUpdateCollection* This,UINT *pctinfo) {
+    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
+}
+static FORCEINLINE HRESULT IUpdateCollection_GetTypeInfo(IUpdateCollection* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
+    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
+}
+static FORCEINLINE HRESULT IUpdateCollection_GetIDsOfNames(IUpdateCollection* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
+    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
+}
+static FORCEINLINE HRESULT IUpdateCollection_Invoke(IUpdateCollection* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
+    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
+}
+/*** IUpdateCollection methods ***/
+static FORCEINLINE HRESULT IUpdateCollection_get_Item(IUpdateCollection* This,LONG index,IUpdate **retval) {
+    return This->lpVtbl->get_Item(This,index,retval);
+}
+static FORCEINLINE HRESULT IUpdateCollection_put_Item(IUpdateCollection* This,LONG index,IUpdate *value) {
+    return This->lpVtbl->put_Item(This,index,value);
+}
+static FORCEINLINE HRESULT IUpdateCollection_get__NewEnum(IUpdateCollection* This,IUnknown **retval) {
+    return This->lpVtbl->get__NewEnum(This,retval);
+}
+static FORCEINLINE HRESULT IUpdateCollection_get_Count(IUpdateCollection* This,LONG *retval) {
+    return This->lpVtbl->get_Count(This,retval);
+}
+static FORCEINLINE HRESULT IUpdateCollection_get_ReadOnly(IUpdateCollection* This,VARIANT_BOOL *retval) {
+    return This->lpVtbl->get_ReadOnly(This,retval);
+}
+static FORCEINLINE HRESULT IUpdateCollection_Add(IUpdateCollection* This,IUpdate *value,LONG *retval) {
+    return This->lpVtbl->Add(This,value,retval);
+}
+static FORCEINLINE HRESULT IUpdateCollection_Clear(IUpdateCollection* This) {
+    return This->lpVtbl->Clear(This);
+}
+static FORCEINLINE HRESULT IUpdateCollection_Copy(IUpdateCollection* This,IUpdateCollection **retval) {
+    return This->lpVtbl->Copy(This,retval);
+}
+static FORCEINLINE HRESULT IUpdateCollection_Insert(IUpdateCollection* This,LONG index,IUpdate *value) {
+    return This->lpVtbl->Insert(This,index,value);
+}
+static FORCEINLINE HRESULT IUpdateCollection_RemoveAt(IUpdateCollection* This,LONG index) {
+    return This->lpVtbl->RemoveAt(This,index);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IUpdateCollection_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * ISearchJob interface
+ */
+#ifndef __ISearchJob_INTERFACE_DEFINED__
+#define __ISearchJob_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_ISearchJob, 0x7366ea16, 0x7a1a, 0x4ea2, 0xb0,0x42, 0x97,0x3d,0x3e,0x9c,0xd9,0x9b);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("7366ea16-7a1a-4ea2-b042-973d3e9cd99b")
+ISearchJob : public IDispatch
+{
+    virtual HRESULT STDMETHODCALLTYPE get_AsyncState(
+        VARIANT *retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_IsCompleted(
+        VARIANT_BOOL *retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CleanUp(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE RequestAbort(
+        ) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(ISearchJob, 0x7366ea16, 0x7a1a, 0x4ea2, 0xb0,0x42, 0x97,0x3d,0x3e,0x9c,0xd9,0x9b)
+#endif
+#else
+typedef struct ISearchJobVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        ISearchJob *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        ISearchJob *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        ISearchJob *This);
+
+    /*** IDispatch methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
+        ISearchJob *This,
+        UINT *pctinfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
+        ISearchJob *This,
+        UINT iTInfo,
+        LCID lcid,
+        ITypeInfo **ppTInfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
+        ISearchJob *This,
+        REFIID riid,
+        LPOLESTR *rgszNames,
+        UINT cNames,
+        LCID lcid,
+        DISPID *rgDispId);
+
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        ISearchJob *This,
+        DISPID dispIdMember,
+        REFIID riid,
+        LCID lcid,
+        WORD wFlags,
+        DISPPARAMS *pDispParams,
+        VARIANT *pVarResult,
+        EXCEPINFO *pExcepInfo,
+        UINT *puArgErr);
+
+    /*** ISearchJob methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_AsyncState)(
+        ISearchJob *This,
+        VARIANT *retval);
+
+    HRESULT (STDMETHODCALLTYPE *get_IsCompleted)(
+        ISearchJob *This,
+        VARIANT_BOOL *retval);
+
+    HRESULT (STDMETHODCALLTYPE *CleanUp)(
+        ISearchJob *This);
+
+    HRESULT (STDMETHODCALLTYPE *RequestAbort)(
+        ISearchJob *This);
+
+    END_INTERFACE
+} ISearchJobVtbl;
+
+interface ISearchJob {
+    CONST_VTBL ISearchJobVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define ISearchJob_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define ISearchJob_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define ISearchJob_Release(This) (This)->lpVtbl->Release(This)
+/*** IDispatch methods ***/
+#define ISearchJob_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
+#define ISearchJob_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+#define ISearchJob_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+#define ISearchJob_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+/*** ISearchJob methods ***/
+#define ISearchJob_get_AsyncState(This,retval) (This)->lpVtbl->get_AsyncState(This,retval)
+#define ISearchJob_get_IsCompleted(This,retval) (This)->lpVtbl->get_IsCompleted(This,retval)
+#define ISearchJob_CleanUp(This) (This)->lpVtbl->CleanUp(This)
+#define ISearchJob_RequestAbort(This) (This)->lpVtbl->RequestAbort(This)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT ISearchJob_QueryInterface(ISearchJob* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG ISearchJob_AddRef(ISearchJob* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG ISearchJob_Release(ISearchJob* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDispatch methods ***/
+static FORCEINLINE HRESULT ISearchJob_GetTypeInfoCount(ISearchJob* This,UINT *pctinfo) {
+    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
+}
+static FORCEINLINE HRESULT ISearchJob_GetTypeInfo(ISearchJob* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
+    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
+}
+static FORCEINLINE HRESULT ISearchJob_GetIDsOfNames(ISearchJob* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
+    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
+}
+static FORCEINLINE HRESULT ISearchJob_Invoke(ISearchJob* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
+    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
+}
+/*** ISearchJob methods ***/
+static FORCEINLINE HRESULT ISearchJob_get_AsyncState(ISearchJob* This,VARIANT *retval) {
+    return This->lpVtbl->get_AsyncState(This,retval);
+}
+static FORCEINLINE HRESULT ISearchJob_get_IsCompleted(ISearchJob* This,VARIANT_BOOL *retval) {
+    return This->lpVtbl->get_IsCompleted(This,retval);
+}
+static FORCEINLINE HRESULT ISearchJob_CleanUp(ISearchJob* This) {
+    return This->lpVtbl->CleanUp(This);
+}
+static FORCEINLINE HRESULT ISearchJob_RequestAbort(ISearchJob* This) {
+    return This->lpVtbl->RequestAbort(This);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __ISearchJob_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * ISearchResult interface
+ */
+#ifndef __ISearchResult_INTERFACE_DEFINED__
+#define __ISearchResult_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_ISearchResult, 0xd40cff62, 0xe08c, 0x4498, 0x94,0x1a, 0x01,0xe2,0x5f,0x0f,0xd3,0x3c);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("d40cff62-e08c-4498-941a-01e25f0fd33c")
+ISearchResult : public IDispatch
+{
+    virtual HRESULT STDMETHODCALLTYPE get_ResultCode(
+        OperationResultCode *retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_RootCategories(
+        ICategoryCollection **retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_Updates(
+        IUpdateCollection **retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_Warnings(
+        IUpdateExceptionCollection **retval) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(ISearchResult, 0xd40cff62, 0xe08c, 0x4498, 0x94,0x1a, 0x01,0xe2,0x5f,0x0f,0xd3,0x3c)
+#endif
+#else
+typedef struct ISearchResultVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        ISearchResult *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        ISearchResult *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        ISearchResult *This);
+
+    /*** IDispatch methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
+        ISearchResult *This,
+        UINT *pctinfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
+        ISearchResult *This,
+        UINT iTInfo,
+        LCID lcid,
+        ITypeInfo **ppTInfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
+        ISearchResult *This,
+        REFIID riid,
+        LPOLESTR *rgszNames,
+        UINT cNames,
+        LCID lcid,
+        DISPID *rgDispId);
+
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        ISearchResult *This,
+        DISPID dispIdMember,
+        REFIID riid,
+        LCID lcid,
+        WORD wFlags,
+        DISPPARAMS *pDispParams,
+        VARIANT *pVarResult,
+        EXCEPINFO *pExcepInfo,
+        UINT *puArgErr);
+
+    /*** ISearchResult methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_ResultCode)(
+        ISearchResult *This,
+        OperationResultCode *retval);
+
+    HRESULT (STDMETHODCALLTYPE *get_RootCategories)(
+        ISearchResult *This,
+        ICategoryCollection **retval);
+
+    HRESULT (STDMETHODCALLTYPE *get_Updates)(
+        ISearchResult *This,
+        IUpdateCollection **retval);
+
+    HRESULT (STDMETHODCALLTYPE *get_Warnings)(
+        ISearchResult *This,
+        IUpdateExceptionCollection **retval);
+
+    END_INTERFACE
+} ISearchResultVtbl;
+
+interface ISearchResult {
+    CONST_VTBL ISearchResultVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define ISearchResult_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define ISearchResult_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define ISearchResult_Release(This) (This)->lpVtbl->Release(This)
+/*** IDispatch methods ***/
+#define ISearchResult_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
+#define ISearchResult_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+#define ISearchResult_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+#define ISearchResult_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+/*** ISearchResult methods ***/
+#define ISearchResult_get_ResultCode(This,retval) (This)->lpVtbl->get_ResultCode(This,retval)
+#define ISearchResult_get_RootCategories(This,retval) (This)->lpVtbl->get_RootCategories(This,retval)
+#define ISearchResult_get_Updates(This,retval) (This)->lpVtbl->get_Updates(This,retval)
+#define ISearchResult_get_Warnings(This,retval) (This)->lpVtbl->get_Warnings(This,retval)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT ISearchResult_QueryInterface(ISearchResult* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG ISearchResult_AddRef(ISearchResult* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG ISearchResult_Release(ISearchResult* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDispatch methods ***/
+static FORCEINLINE HRESULT ISearchResult_GetTypeInfoCount(ISearchResult* This,UINT *pctinfo) {
+    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
+}
+static FORCEINLINE HRESULT ISearchResult_GetTypeInfo(ISearchResult* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
+    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
+}
+static FORCEINLINE HRESULT ISearchResult_GetIDsOfNames(ISearchResult* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
+    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
+}
+static FORCEINLINE HRESULT ISearchResult_Invoke(ISearchResult* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
+    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
+}
+/*** ISearchResult methods ***/
+static FORCEINLINE HRESULT ISearchResult_get_ResultCode(ISearchResult* This,OperationResultCode *retval) {
+    return This->lpVtbl->get_ResultCode(This,retval);
+}
+static FORCEINLINE HRESULT ISearchResult_get_RootCategories(ISearchResult* This,ICategoryCollection **retval) {
+    return This->lpVtbl->get_RootCategories(This,retval);
+}
+static FORCEINLINE HRESULT ISearchResult_get_Updates(ISearchResult* This,IUpdateCollection **retval) {
+    return This->lpVtbl->get_Updates(This,retval);
+}
+static FORCEINLINE HRESULT ISearchResult_get_Warnings(ISearchResult* This,IUpdateExceptionCollection **retval) {
+    return This->lpVtbl->get_Warnings(This,retval);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __ISearchResult_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IUpdateHistoryEntry interface
+ */
+#ifndef __IUpdateHistoryEntry_INTERFACE_DEFINED__
+#define __IUpdateHistoryEntry_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IUpdateHistoryEntry, 0xbe56a644, 0xaf0e, 0x4e0e, 0xa3,0x11, 0xc1,0xd8,0xe6,0x95,0xcb,0xff);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("be56a644-af0e-4e0e-a311-c1d8e695cbff")
+IUpdateHistoryEntry : public IDispatch
+{
+    virtual HRESULT STDMETHODCALLTYPE get_Operation(
+        UpdateOperation *retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_ResultCode(
+        OperationResultCode *retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_HResult(
+        LONG *retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_Date(
+        DATE *retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_UpdateIdentity(
+        IUpdateIdentity **retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_Title(
+        BSTR *retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_Description(
+        BSTR *retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_UnmappedResultCode(
+        LONG *retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_ClientApplicationID(
+        BSTR *retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_ServerSelection(
+        ServerSelection *retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_ServiceID(
+        BSTR *retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_UninstallationSteps(
+        IStringCollection **retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_UninstallationNotes(
+        BSTR *retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_SupportUrl(
+        BSTR *retval) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IUpdateHistoryEntry, 0xbe56a644, 0xaf0e, 0x4e0e, 0xa3,0x11, 0xc1,0xd8,0xe6,0x95,0xcb,0xff)
+#endif
+#else
+typedef struct IUpdateHistoryEntryVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IUpdateHistoryEntry *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IUpdateHistoryEntry *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IUpdateHistoryEntry *This);
+
+    /*** IDispatch methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
+        IUpdateHistoryEntry *This,
+        UINT *pctinfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
+        IUpdateHistoryEntry *This,
+        UINT iTInfo,
+        LCID lcid,
+        ITypeInfo **ppTInfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
+        IUpdateHistoryEntry *This,
+        REFIID riid,
+        LPOLESTR *rgszNames,
+        UINT cNames,
+        LCID lcid,
+        DISPID *rgDispId);
+
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        IUpdateHistoryEntry *This,
+        DISPID dispIdMember,
+        REFIID riid,
+        LCID lcid,
+        WORD wFlags,
+        DISPPARAMS *pDispParams,
+        VARIANT *pVarResult,
+        EXCEPINFO *pExcepInfo,
+        UINT *puArgErr);
+
+    /*** IUpdateHistoryEntry methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_Operation)(
+        IUpdateHistoryEntry *This,
+        UpdateOperation *retval);
+
+    HRESULT (STDMETHODCALLTYPE *get_ResultCode)(
+        IUpdateHistoryEntry *This,
+        OperationResultCode *retval);
+
+    HRESULT (STDMETHODCALLTYPE *get_HResult)(
+        IUpdateHistoryEntry *This,
+        LONG *retval);
+
+    HRESULT (STDMETHODCALLTYPE *get_Date)(
+        IUpdateHistoryEntry *This,
+        DATE *retval);
+
+    HRESULT (STDMETHODCALLTYPE *get_UpdateIdentity)(
+        IUpdateHistoryEntry *This,
+        IUpdateIdentity **retval);
+
+    HRESULT (STDMETHODCALLTYPE *get_Title)(
+        IUpdateHistoryEntry *This,
+        BSTR *retval);
+
+    HRESULT (STDMETHODCALLTYPE *get_Description)(
+        IUpdateHistoryEntry *This,
+        BSTR *retval);
+
+    HRESULT (STDMETHODCALLTYPE *get_UnmappedResultCode)(
+        IUpdateHistoryEntry *This,
+        LONG *retval);
+
+    HRESULT (STDMETHODCALLTYPE *get_ClientApplicationID)(
+        IUpdateHistoryEntry *This,
+        BSTR *retval);
+
+    HRESULT (STDMETHODCALLTYPE *get_ServerSelection)(
+        IUpdateHistoryEntry *This,
+        ServerSelection *retval);
+
+    HRESULT (STDMETHODCALLTYPE *get_ServiceID)(
+        IUpdateHistoryEntry *This,
+        BSTR *retval);
+
+    HRESULT (STDMETHODCALLTYPE *get_UninstallationSteps)(
+        IUpdateHistoryEntry *This,
+        IStringCollection **retval);
+
+    HRESULT (STDMETHODCALLTYPE *get_UninstallationNotes)(
+        IUpdateHistoryEntry *This,
+        BSTR *retval);
+
+    HRESULT (STDMETHODCALLTYPE *get_SupportUrl)(
+        IUpdateHistoryEntry *This,
+        BSTR *retval);
+
+    END_INTERFACE
+} IUpdateHistoryEntryVtbl;
+
+interface IUpdateHistoryEntry {
+    CONST_VTBL IUpdateHistoryEntryVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IUpdateHistoryEntry_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IUpdateHistoryEntry_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IUpdateHistoryEntry_Release(This) (This)->lpVtbl->Release(This)
+/*** IDispatch methods ***/
+#define IUpdateHistoryEntry_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
+#define IUpdateHistoryEntry_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+#define IUpdateHistoryEntry_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+#define IUpdateHistoryEntry_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+/*** IUpdateHistoryEntry methods ***/
+#define IUpdateHistoryEntry_get_Operation(This,retval) (This)->lpVtbl->get_Operation(This,retval)
+#define IUpdateHistoryEntry_get_ResultCode(This,retval) (This)->lpVtbl->get_ResultCode(This,retval)
+#define IUpdateHistoryEntry_get_HResult(This,retval) (This)->lpVtbl->get_HResult(This,retval)
+#define IUpdateHistoryEntry_get_Date(This,retval) (This)->lpVtbl->get_Date(This,retval)
+#define IUpdateHistoryEntry_get_UpdateIdentity(This,retval) (This)->lpVtbl->get_UpdateIdentity(This,retval)
+#define IUpdateHistoryEntry_get_Title(This,retval) (This)->lpVtbl->get_Title(This,retval)
+#define IUpdateHistoryEntry_get_Description(This,retval) (This)->lpVtbl->get_Description(This,retval)
+#define IUpdateHistoryEntry_get_UnmappedResultCode(This,retval) (This)->lpVtbl->get_UnmappedResultCode(This,retval)
+#define IUpdateHistoryEntry_get_ClientApplicationID(This,retval) (This)->lpVtbl->get_ClientApplicationID(This,retval)
+#define IUpdateHistoryEntry_get_ServerSelection(This,retval) (This)->lpVtbl->get_ServerSelection(This,retval)
+#define IUpdateHistoryEntry_get_ServiceID(This,retval) (This)->lpVtbl->get_ServiceID(This,retval)
+#define IUpdateHistoryEntry_get_UninstallationSteps(This,retval) (This)->lpVtbl->get_UninstallationSteps(This,retval)
+#define IUpdateHistoryEntry_get_UninstallationNotes(This,retval) (This)->lpVtbl->get_UninstallationNotes(This,retval)
+#define IUpdateHistoryEntry_get_SupportUrl(This,retval) (This)->lpVtbl->get_SupportUrl(This,retval)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IUpdateHistoryEntry_QueryInterface(IUpdateHistoryEntry* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IUpdateHistoryEntry_AddRef(IUpdateHistoryEntry* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IUpdateHistoryEntry_Release(IUpdateHistoryEntry* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDispatch methods ***/
+static FORCEINLINE HRESULT IUpdateHistoryEntry_GetTypeInfoCount(IUpdateHistoryEntry* This,UINT *pctinfo) {
+    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
+}
+static FORCEINLINE HRESULT IUpdateHistoryEntry_GetTypeInfo(IUpdateHistoryEntry* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
+    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
+}
+static FORCEINLINE HRESULT IUpdateHistoryEntry_GetIDsOfNames(IUpdateHistoryEntry* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
+    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
+}
+static FORCEINLINE HRESULT IUpdateHistoryEntry_Invoke(IUpdateHistoryEntry* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
+    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
+}
+/*** IUpdateHistoryEntry methods ***/
+static FORCEINLINE HRESULT IUpdateHistoryEntry_get_Operation(IUpdateHistoryEntry* This,UpdateOperation *retval) {
+    return This->lpVtbl->get_Operation(This,retval);
+}
+static FORCEINLINE HRESULT IUpdateHistoryEntry_get_ResultCode(IUpdateHistoryEntry* This,OperationResultCode *retval) {
+    return This->lpVtbl->get_ResultCode(This,retval);
+}
+static FORCEINLINE HRESULT IUpdateHistoryEntry_get_HResult(IUpdateHistoryEntry* This,LONG *retval) {
+    return This->lpVtbl->get_HResult(This,retval);
+}
+static FORCEINLINE HRESULT IUpdateHistoryEntry_get_Date(IUpdateHistoryEntry* This,DATE *retval) {
+    return This->lpVtbl->get_Date(This,retval);
+}
+static FORCEINLINE HRESULT IUpdateHistoryEntry_get_UpdateIdentity(IUpdateHistoryEntry* This,IUpdateIdentity **retval) {
+    return This->lpVtbl->get_UpdateIdentity(This,retval);
+}
+static FORCEINLINE HRESULT IUpdateHistoryEntry_get_Title(IUpdateHistoryEntry* This,BSTR *retval) {
+    return This->lpVtbl->get_Title(This,retval);
+}
+static FORCEINLINE HRESULT IUpdateHistoryEntry_get_Description(IUpdateHistoryEntry* This,BSTR *retval) {
+    return This->lpVtbl->get_Description(This,retval);
+}
+static FORCEINLINE HRESULT IUpdateHistoryEntry_get_UnmappedResultCode(IUpdateHistoryEntry* This,LONG *retval) {
+    return This->lpVtbl->get_UnmappedResultCode(This,retval);
+}
+static FORCEINLINE HRESULT IUpdateHistoryEntry_get_ClientApplicationID(IUpdateHistoryEntry* This,BSTR *retval) {
+    return This->lpVtbl->get_ClientApplicationID(This,retval);
+}
+static FORCEINLINE HRESULT IUpdateHistoryEntry_get_ServerSelection(IUpdateHistoryEntry* This,ServerSelection *retval) {
+    return This->lpVtbl->get_ServerSelection(This,retval);
+}
+static FORCEINLINE HRESULT IUpdateHistoryEntry_get_ServiceID(IUpdateHistoryEntry* This,BSTR *retval) {
+    return This->lpVtbl->get_ServiceID(This,retval);
+}
+static FORCEINLINE HRESULT IUpdateHistoryEntry_get_UninstallationSteps(IUpdateHistoryEntry* This,IStringCollection **retval) {
+    return This->lpVtbl->get_UninstallationSteps(This,retval);
+}
+static FORCEINLINE HRESULT IUpdateHistoryEntry_get_UninstallationNotes(IUpdateHistoryEntry* This,BSTR *retval) {
+    return This->lpVtbl->get_UninstallationNotes(This,retval);
+}
+static FORCEINLINE HRESULT IUpdateHistoryEntry_get_SupportUrl(IUpdateHistoryEntry* This,BSTR *retval) {
+    return This->lpVtbl->get_SupportUrl(This,retval);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IUpdateHistoryEntry_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IUpdateHistoryEntryCollection interface
+ */
+#ifndef __IUpdateHistoryEntryCollection_INTERFACE_DEFINED__
+#define __IUpdateHistoryEntryCollection_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IUpdateHistoryEntryCollection, 0xa7f04f3c, 0xa290, 0x435b, 0xaa,0xdf, 0xa1,0x16,0xc3,0x35,0x7a,0x5c);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("a7f04f3c-a290-435b-aadf-a116c3357a5c")
+IUpdateHistoryEntryCollection : public IDispatch
+{
+    virtual HRESULT STDMETHODCALLTYPE get_Item(
+        LONG index,
+        IUpdateHistoryEntry **retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get__NewEnum(
+        IUnknown **retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_Count(
+        LONG *retval) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IUpdateHistoryEntryCollection, 0xa7f04f3c, 0xa290, 0x435b, 0xaa,0xdf, 0xa1,0x16,0xc3,0x35,0x7a,0x5c)
+#endif
+#else
+typedef struct IUpdateHistoryEntryCollectionVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IUpdateHistoryEntryCollection *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IUpdateHistoryEntryCollection *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IUpdateHistoryEntryCollection *This);
+
+    /*** IDispatch methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
+        IUpdateHistoryEntryCollection *This,
+        UINT *pctinfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
+        IUpdateHistoryEntryCollection *This,
+        UINT iTInfo,
+        LCID lcid,
+        ITypeInfo **ppTInfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
+        IUpdateHistoryEntryCollection *This,
+        REFIID riid,
+        LPOLESTR *rgszNames,
+        UINT cNames,
+        LCID lcid,
+        DISPID *rgDispId);
+
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        IUpdateHistoryEntryCollection *This,
+        DISPID dispIdMember,
+        REFIID riid,
+        LCID lcid,
+        WORD wFlags,
+        DISPPARAMS *pDispParams,
+        VARIANT *pVarResult,
+        EXCEPINFO *pExcepInfo,
+        UINT *puArgErr);
+
+    /*** IUpdateHistoryEntryCollection methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_Item)(
+        IUpdateHistoryEntryCollection *This,
+        LONG index,
+        IUpdateHistoryEntry **retval);
+
+    HRESULT (STDMETHODCALLTYPE *get__NewEnum)(
+        IUpdateHistoryEntryCollection *This,
+        IUnknown **retval);
+
+    HRESULT (STDMETHODCALLTYPE *get_Count)(
+        IUpdateHistoryEntryCollection *This,
+        LONG *retval);
+
+    END_INTERFACE
+} IUpdateHistoryEntryCollectionVtbl;
+
+interface IUpdateHistoryEntryCollection {
+    CONST_VTBL IUpdateHistoryEntryCollectionVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IUpdateHistoryEntryCollection_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IUpdateHistoryEntryCollection_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IUpdateHistoryEntryCollection_Release(This) (This)->lpVtbl->Release(This)
+/*** IDispatch methods ***/
+#define IUpdateHistoryEntryCollection_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
+#define IUpdateHistoryEntryCollection_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+#define IUpdateHistoryEntryCollection_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+#define IUpdateHistoryEntryCollection_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+/*** IUpdateHistoryEntryCollection methods ***/
+#define IUpdateHistoryEntryCollection_get_Item(This,index,retval) (This)->lpVtbl->get_Item(This,index,retval)
+#define IUpdateHistoryEntryCollection_get__NewEnum(This,retval) (This)->lpVtbl->get__NewEnum(This,retval)
+#define IUpdateHistoryEntryCollection_get_Count(This,retval) (This)->lpVtbl->get_Count(This,retval)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IUpdateHistoryEntryCollection_QueryInterface(IUpdateHistoryEntryCollection* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IUpdateHistoryEntryCollection_AddRef(IUpdateHistoryEntryCollection* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IUpdateHistoryEntryCollection_Release(IUpdateHistoryEntryCollection* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDispatch methods ***/
+static FORCEINLINE HRESULT IUpdateHistoryEntryCollection_GetTypeInfoCount(IUpdateHistoryEntryCollection* This,UINT *pctinfo) {
+    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
+}
+static FORCEINLINE HRESULT IUpdateHistoryEntryCollection_GetTypeInfo(IUpdateHistoryEntryCollection* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
+    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
+}
+static FORCEINLINE HRESULT IUpdateHistoryEntryCollection_GetIDsOfNames(IUpdateHistoryEntryCollection* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
+    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
+}
+static FORCEINLINE HRESULT IUpdateHistoryEntryCollection_Invoke(IUpdateHistoryEntryCollection* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
+    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
+}
+/*** IUpdateHistoryEntryCollection methods ***/
+static FORCEINLINE HRESULT IUpdateHistoryEntryCollection_get_Item(IUpdateHistoryEntryCollection* This,LONG index,IUpdateHistoryEntry **retval) {
+    return This->lpVtbl->get_Item(This,index,retval);
+}
+static FORCEINLINE HRESULT IUpdateHistoryEntryCollection_get__NewEnum(IUpdateHistoryEntryCollection* This,IUnknown **retval) {
+    return This->lpVtbl->get__NewEnum(This,retval);
+}
+static FORCEINLINE HRESULT IUpdateHistoryEntryCollection_get_Count(IUpdateHistoryEntryCollection* This,LONG *retval) {
+    return This->lpVtbl->get_Count(This,retval);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IUpdateHistoryEntryCollection_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IUpdateSearcher interface
+ */
+#ifndef __IUpdateSearcher_INTERFACE_DEFINED__
+#define __IUpdateSearcher_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IUpdateSearcher, 0x8f45abf1, 0xf9ae, 0x4b95, 0xa9,0x33, 0xf0,0xf6,0x6e,0x50,0x56,0xea);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("8f45abf1-f9ae-4b95-a933-f0f66e5056ea")
+IUpdateSearcher : public IDispatch
+{
+    virtual HRESULT STDMETHODCALLTYPE get_CanAutomaticallyUpgradeService(
+        VARIANT_BOOL *retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_CanAutomaticallyUpgradeService(
+        VARIANT_BOOL value) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_ClientApplicationID(
+        BSTR *retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_ClientApplicationID(
+        BSTR value) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_IncludePotentiallySupersededUpdates(
+        VARIANT_BOOL *retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_IncludePotentiallySupersededUpdates(
+        VARIANT_BOOL value) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_ServerSelection(
+        ServerSelection *retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_ServerSelection(
+        ServerSelection value) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE BeginSearch(
+        BSTR criteria,
+        IUnknown *onCompleted,
+        VARIANT state,
+        ISearchJob **retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE EndSearch(
+        ISearchJob *searchJob,
+        ISearchResult **retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE EscapeString(
+        BSTR unescaped,
+        BSTR *retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE QueryHistory(
+        LONG startIndex,
+        LONG count,
+        IUpdateHistoryEntryCollection **retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Search(
+        BSTR criteria,
+        ISearchResult **retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_Online(
+        VARIANT_BOOL *retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_Online(
+        VARIANT_BOOL value) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetTotalHistoryCount(
+        LONG *retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_ServiceID(
+        BSTR *retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_ServiceID(
+        BSTR value) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IUpdateSearcher, 0x8f45abf1, 0xf9ae, 0x4b95, 0xa9,0x33, 0xf0,0xf6,0x6e,0x50,0x56,0xea)
+#endif
+#else
+typedef struct IUpdateSearcherVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IUpdateSearcher *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IUpdateSearcher *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IUpdateSearcher *This);
+
+    /*** IDispatch methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
+        IUpdateSearcher *This,
+        UINT *pctinfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
+        IUpdateSearcher *This,
+        UINT iTInfo,
+        LCID lcid,
+        ITypeInfo **ppTInfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
+        IUpdateSearcher *This,
+        REFIID riid,
+        LPOLESTR *rgszNames,
+        UINT cNames,
+        LCID lcid,
+        DISPID *rgDispId);
+
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        IUpdateSearcher *This,
+        DISPID dispIdMember,
+        REFIID riid,
+        LCID lcid,
+        WORD wFlags,
+        DISPPARAMS *pDispParams,
+        VARIANT *pVarResult,
+        EXCEPINFO *pExcepInfo,
+        UINT *puArgErr);
+
+    /*** IUpdateSearcher methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_CanAutomaticallyUpgradeService)(
+        IUpdateSearcher *This,
+        VARIANT_BOOL *retval);
+
+    HRESULT (STDMETHODCALLTYPE *put_CanAutomaticallyUpgradeService)(
+        IUpdateSearcher *This,
+        VARIANT_BOOL value);
+
+    HRESULT (STDMETHODCALLTYPE *get_ClientApplicationID)(
+        IUpdateSearcher *This,
+        BSTR *retval);
+
+    HRESULT (STDMETHODCALLTYPE *put_ClientApplicationID)(
+        IUpdateSearcher *This,
+        BSTR value);
+
+    HRESULT (STDMETHODCALLTYPE *get_IncludePotentiallySupersededUpdates)(
+        IUpdateSearcher *This,
+        VARIANT_BOOL *retval);
+
+    HRESULT (STDMETHODCALLTYPE *put_IncludePotentiallySupersededUpdates)(
+        IUpdateSearcher *This,
+        VARIANT_BOOL value);
+
+    HRESULT (STDMETHODCALLTYPE *get_ServerSelection)(
+        IUpdateSearcher *This,
+        ServerSelection *retval);
+
+    HRESULT (STDMETHODCALLTYPE *put_ServerSelection)(
+        IUpdateSearcher *This,
+        ServerSelection value);
+
+    HRESULT (STDMETHODCALLTYPE *BeginSearch)(
+        IUpdateSearcher *This,
+        BSTR criteria,
+        IUnknown *onCompleted,
+        VARIANT state,
+        ISearchJob **retval);
+
+    HRESULT (STDMETHODCALLTYPE *EndSearch)(
+        IUpdateSearcher *This,
+        ISearchJob *searchJob,
+        ISearchResult **retval);
+
+    HRESULT (STDMETHODCALLTYPE *EscapeString)(
+        IUpdateSearcher *This,
+        BSTR unescaped,
+        BSTR *retval);
+
+    HRESULT (STDMETHODCALLTYPE *QueryHistory)(
+        IUpdateSearcher *This,
+        LONG startIndex,
+        LONG count,
+        IUpdateHistoryEntryCollection **retval);
+
+    HRESULT (STDMETHODCALLTYPE *Search)(
+        IUpdateSearcher *This,
+        BSTR criteria,
+        ISearchResult **retval);
+
+    HRESULT (STDMETHODCALLTYPE *get_Online)(
+        IUpdateSearcher *This,
+        VARIANT_BOOL *retval);
+
+    HRESULT (STDMETHODCALLTYPE *put_Online)(
+        IUpdateSearcher *This,
+        VARIANT_BOOL value);
+
+    HRESULT (STDMETHODCALLTYPE *GetTotalHistoryCount)(
+        IUpdateSearcher *This,
+        LONG *retval);
+
+    HRESULT (STDMETHODCALLTYPE *get_ServiceID)(
+        IUpdateSearcher *This,
+        BSTR *retval);
+
+    HRESULT (STDMETHODCALLTYPE *put_ServiceID)(
+        IUpdateSearcher *This,
+        BSTR value);
+
+    END_INTERFACE
+} IUpdateSearcherVtbl;
+
+interface IUpdateSearcher {
+    CONST_VTBL IUpdateSearcherVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IUpdateSearcher_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IUpdateSearcher_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IUpdateSearcher_Release(This) (This)->lpVtbl->Release(This)
+/*** IDispatch methods ***/
+#define IUpdateSearcher_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
+#define IUpdateSearcher_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+#define IUpdateSearcher_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+#define IUpdateSearcher_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+/*** IUpdateSearcher methods ***/
+#define IUpdateSearcher_get_CanAutomaticallyUpgradeService(This,retval) (This)->lpVtbl->get_CanAutomaticallyUpgradeService(This,retval)
+#define IUpdateSearcher_put_CanAutomaticallyUpgradeService(This,value) (This)->lpVtbl->put_CanAutomaticallyUpgradeService(This,value)
+#define IUpdateSearcher_get_ClientApplicationID(This,retval) (This)->lpVtbl->get_ClientApplicationID(This,retval)
+#define IUpdateSearcher_put_ClientApplicationID(This,value) (This)->lpVtbl->put_ClientApplicationID(This,value)
+#define IUpdateSearcher_get_IncludePotentiallySupersededUpdates(This,retval) (This)->lpVtbl->get_IncludePotentiallySupersededUpdates(This,retval)
+#define IUpdateSearcher_put_IncludePotentiallySupersededUpdates(This,value) (This)->lpVtbl->put_IncludePotentiallySupersededUpdates(This,value)
+#define IUpdateSearcher_get_ServerSelection(This,retval) (This)->lpVtbl->get_ServerSelection(This,retval)
+#define IUpdateSearcher_put_ServerSelection(This,value) (This)->lpVtbl->put_ServerSelection(This,value)
+#define IUpdateSearcher_BeginSearch(This,criteria,onCompleted,state,retval) (This)->lpVtbl->BeginSearch(This,criteria,onCompleted,state,retval)
+#define IUpdateSearcher_EndSearch(This,searchJob,retval) (This)->lpVtbl->EndSearch(This,searchJob,retval)
+#define IUpdateSearcher_EscapeString(This,unescaped,retval) (This)->lpVtbl->EscapeString(This,unescaped,retval)
+#define IUpdateSearcher_QueryHistory(This,startIndex,count,retval) (This)->lpVtbl->QueryHistory(This,startIndex,count,retval)
+#define IUpdateSearcher_Search(This,criteria,retval) (This)->lpVtbl->Search(This,criteria,retval)
+#define IUpdateSearcher_get_Online(This,retval) (This)->lpVtbl->get_Online(This,retval)
+#define IUpdateSearcher_put_Online(This,value) (This)->lpVtbl->put_Online(This,value)
+#define IUpdateSearcher_GetTotalHistoryCount(This,retval) (This)->lpVtbl->GetTotalHistoryCount(This,retval)
+#define IUpdateSearcher_get_ServiceID(This,retval) (This)->lpVtbl->get_ServiceID(This,retval)
+#define IUpdateSearcher_put_ServiceID(This,value) (This)->lpVtbl->put_ServiceID(This,value)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IUpdateSearcher_QueryInterface(IUpdateSearcher* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IUpdateSearcher_AddRef(IUpdateSearcher* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IUpdateSearcher_Release(IUpdateSearcher* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDispatch methods ***/
+static FORCEINLINE HRESULT IUpdateSearcher_GetTypeInfoCount(IUpdateSearcher* This,UINT *pctinfo) {
+    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
+}
+static FORCEINLINE HRESULT IUpdateSearcher_GetTypeInfo(IUpdateSearcher* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
+    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
+}
+static FORCEINLINE HRESULT IUpdateSearcher_GetIDsOfNames(IUpdateSearcher* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
+    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
+}
+static FORCEINLINE HRESULT IUpdateSearcher_Invoke(IUpdateSearcher* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
+    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
+}
+/*** IUpdateSearcher methods ***/
+static FORCEINLINE HRESULT IUpdateSearcher_get_CanAutomaticallyUpgradeService(IUpdateSearcher* This,VARIANT_BOOL *retval) {
+    return This->lpVtbl->get_CanAutomaticallyUpgradeService(This,retval);
+}
+static FORCEINLINE HRESULT IUpdateSearcher_put_CanAutomaticallyUpgradeService(IUpdateSearcher* This,VARIANT_BOOL value) {
+    return This->lpVtbl->put_CanAutomaticallyUpgradeService(This,value);
+}
+static FORCEINLINE HRESULT IUpdateSearcher_get_ClientApplicationID(IUpdateSearcher* This,BSTR *retval) {
+    return This->lpVtbl->get_ClientApplicationID(This,retval);
+}
+static FORCEINLINE HRESULT IUpdateSearcher_put_ClientApplicationID(IUpdateSearcher* This,BSTR value) {
+    return This->lpVtbl->put_ClientApplicationID(This,value);
+}
+static FORCEINLINE HRESULT IUpdateSearcher_get_IncludePotentiallySupersededUpdates(IUpdateSearcher* This,VARIANT_BOOL *retval) {
+    return This->lpVtbl->get_IncludePotentiallySupersededUpdates(This,retval);
+}
+static FORCEINLINE HRESULT IUpdateSearcher_put_IncludePotentiallySupersededUpdates(IUpdateSearcher* This,VARIANT_BOOL value) {
+    return This->lpVtbl->put_IncludePotentiallySupersededUpdates(This,value);
+}
+static FORCEINLINE HRESULT IUpdateSearcher_get_ServerSelection(IUpdateSearcher* This,ServerSelection *retval) {
+    return This->lpVtbl->get_ServerSelection(This,retval);
+}
+static FORCEINLINE HRESULT IUpdateSearcher_put_ServerSelection(IUpdateSearcher* This,ServerSelection value) {
+    return This->lpVtbl->put_ServerSelection(This,value);
+}
+static FORCEINLINE HRESULT IUpdateSearcher_BeginSearch(IUpdateSearcher* This,BSTR criteria,IUnknown *onCompleted,VARIANT state,ISearchJob **retval) {
+    return This->lpVtbl->BeginSearch(This,criteria,onCompleted,state,retval);
+}
+static FORCEINLINE HRESULT IUpdateSearcher_EndSearch(IUpdateSearcher* This,ISearchJob *searchJob,ISearchResult **retval) {
+    return This->lpVtbl->EndSearch(This,searchJob,retval);
+}
+static FORCEINLINE HRESULT IUpdateSearcher_EscapeString(IUpdateSearcher* This,BSTR unescaped,BSTR *retval) {
+    return This->lpVtbl->EscapeString(This,unescaped,retval);
+}
+static FORCEINLINE HRESULT IUpdateSearcher_QueryHistory(IUpdateSearcher* This,LONG startIndex,LONG count,IUpdateHistoryEntryCollection **retval) {
+    return This->lpVtbl->QueryHistory(This,startIndex,count,retval);
+}
+static FORCEINLINE HRESULT IUpdateSearcher_Search(IUpdateSearcher* This,BSTR criteria,ISearchResult **retval) {
+    return This->lpVtbl->Search(This,criteria,retval);
+}
+static FORCEINLINE HRESULT IUpdateSearcher_get_Online(IUpdateSearcher* This,VARIANT_BOOL *retval) {
+    return This->lpVtbl->get_Online(This,retval);
+}
+static FORCEINLINE HRESULT IUpdateSearcher_put_Online(IUpdateSearcher* This,VARIANT_BOOL value) {
+    return This->lpVtbl->put_Online(This,value);
+}
+static FORCEINLINE HRESULT IUpdateSearcher_GetTotalHistoryCount(IUpdateSearcher* This,LONG *retval) {
+    return This->lpVtbl->GetTotalHistoryCount(This,retval);
+}
+static FORCEINLINE HRESULT IUpdateSearcher_get_ServiceID(IUpdateSearcher* This,BSTR *retval) {
+    return This->lpVtbl->get_ServiceID(This,retval);
+}
+static FORCEINLINE HRESULT IUpdateSearcher_put_ServiceID(IUpdateSearcher* This,BSTR value) {
+    return This->lpVtbl->put_ServiceID(This,value);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IUpdateSearcher_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IUpdateDownloadResult interface
+ */
+#ifndef __IUpdateDownloadResult_INTERFACE_DEFINED__
+#define __IUpdateDownloadResult_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IUpdateDownloadResult, 0xbf99af76, 0xb575, 0x42ad, 0x8a,0xa4, 0x33,0xcb,0xb5,0x47,0x7a,0xf1);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("bf99af76-b575-42ad-8aa4-33cbb5477af1")
+IUpdateDownloadResult : public IDispatch
+{
+    virtual HRESULT STDMETHODCALLTYPE get_HResult(
+        LONG *retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_ResultCode(
+        OperationResultCode *retval) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IUpdateDownloadResult, 0xbf99af76, 0xb575, 0x42ad, 0x8a,0xa4, 0x33,0xcb,0xb5,0x47,0x7a,0xf1)
+#endif
+#else
+typedef struct IUpdateDownloadResultVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IUpdateDownloadResult *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IUpdateDownloadResult *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IUpdateDownloadResult *This);
+
+    /*** IDispatch methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
+        IUpdateDownloadResult *This,
+        UINT *pctinfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
+        IUpdateDownloadResult *This,
+        UINT iTInfo,
+        LCID lcid,
+        ITypeInfo **ppTInfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
+        IUpdateDownloadResult *This,
+        REFIID riid,
+        LPOLESTR *rgszNames,
+        UINT cNames,
+        LCID lcid,
+        DISPID *rgDispId);
+
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        IUpdateDownloadResult *This,
+        DISPID dispIdMember,
+        REFIID riid,
+        LCID lcid,
+        WORD wFlags,
+        DISPPARAMS *pDispParams,
+        VARIANT *pVarResult,
+        EXCEPINFO *pExcepInfo,
+        UINT *puArgErr);
+
+    /*** IUpdateDownloadResult methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_HResult)(
+        IUpdateDownloadResult *This,
+        LONG *retval);
+
+    HRESULT (STDMETHODCALLTYPE *get_ResultCode)(
+        IUpdateDownloadResult *This,
+        OperationResultCode *retval);
+
+    END_INTERFACE
+} IUpdateDownloadResultVtbl;
+
+interface IUpdateDownloadResult {
+    CONST_VTBL IUpdateDownloadResultVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IUpdateDownloadResult_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IUpdateDownloadResult_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IUpdateDownloadResult_Release(This) (This)->lpVtbl->Release(This)
+/*** IDispatch methods ***/
+#define IUpdateDownloadResult_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
+#define IUpdateDownloadResult_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+#define IUpdateDownloadResult_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+#define IUpdateDownloadResult_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+/*** IUpdateDownloadResult methods ***/
+#define IUpdateDownloadResult_get_HResult(This,retval) (This)->lpVtbl->get_HResult(This,retval)
+#define IUpdateDownloadResult_get_ResultCode(This,retval) (This)->lpVtbl->get_ResultCode(This,retval)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IUpdateDownloadResult_QueryInterface(IUpdateDownloadResult* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IUpdateDownloadResult_AddRef(IUpdateDownloadResult* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IUpdateDownloadResult_Release(IUpdateDownloadResult* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDispatch methods ***/
+static FORCEINLINE HRESULT IUpdateDownloadResult_GetTypeInfoCount(IUpdateDownloadResult* This,UINT *pctinfo) {
+    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
+}
+static FORCEINLINE HRESULT IUpdateDownloadResult_GetTypeInfo(IUpdateDownloadResult* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
+    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
+}
+static FORCEINLINE HRESULT IUpdateDownloadResult_GetIDsOfNames(IUpdateDownloadResult* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
+    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
+}
+static FORCEINLINE HRESULT IUpdateDownloadResult_Invoke(IUpdateDownloadResult* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
+    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
+}
+/*** IUpdateDownloadResult methods ***/
+static FORCEINLINE HRESULT IUpdateDownloadResult_get_HResult(IUpdateDownloadResult* This,LONG *retval) {
+    return This->lpVtbl->get_HResult(This,retval);
+}
+static FORCEINLINE HRESULT IUpdateDownloadResult_get_ResultCode(IUpdateDownloadResult* This,OperationResultCode *retval) {
+    return This->lpVtbl->get_ResultCode(This,retval);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IUpdateDownloadResult_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IDownloadProgress interface
+ */
+#ifndef __IDownloadProgress_INTERFACE_DEFINED__
+#define __IDownloadProgress_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IDownloadProgress, 0xd31a5bac, 0xf719, 0x4178, 0x9d,0xbb, 0x5e,0x2c,0xb4,0x7f,0xd1,0x8a);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("d31a5bac-f719-4178-9dbb-5e2cb47fd18a")
+IDownloadProgress : public IDispatch
+{
+    virtual HRESULT STDMETHODCALLTYPE get_CurrentUpdateBytesDownloaded(
+        DECIMAL *retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_CurrentUpdateBytesToDownload(
+        DECIMAL *retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_CurrentUpdateIndex(
+        LONG *retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_PercentComplete(
+        LONG *retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_TotalBytesDownloaded(
+        DECIMAL *retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_TotalBytesToDownload(
+        DECIMAL *retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetUpdateResult(
+        LONG updateIndex,
+        IUpdateDownloadResult **retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_CurrentUpdateDownloadPhase(
+        DownloadPhase *retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_CurrentUpdatePercentComplete(
+        LONG *retval) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IDownloadProgress, 0xd31a5bac, 0xf719, 0x4178, 0x9d,0xbb, 0x5e,0x2c,0xb4,0x7f,0xd1,0x8a)
+#endif
+#else
+typedef struct IDownloadProgressVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IDownloadProgress *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IDownloadProgress *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IDownloadProgress *This);
+
+    /*** IDispatch methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
+        IDownloadProgress *This,
+        UINT *pctinfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
+        IDownloadProgress *This,
+        UINT iTInfo,
+        LCID lcid,
+        ITypeInfo **ppTInfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
+        IDownloadProgress *This,
+        REFIID riid,
+        LPOLESTR *rgszNames,
+        UINT cNames,
+        LCID lcid,
+        DISPID *rgDispId);
+
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        IDownloadProgress *This,
+        DISPID dispIdMember,
+        REFIID riid,
+        LCID lcid,
+        WORD wFlags,
+        DISPPARAMS *pDispParams,
+        VARIANT *pVarResult,
+        EXCEPINFO *pExcepInfo,
+        UINT *puArgErr);
+
+    /*** IDownloadProgress methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_CurrentUpdateBytesDownloaded)(
+        IDownloadProgress *This,
+        DECIMAL *retval);
+
+    HRESULT (STDMETHODCALLTYPE *get_CurrentUpdateBytesToDownload)(
+        IDownloadProgress *This,
+        DECIMAL *retval);
+
+    HRESULT (STDMETHODCALLTYPE *get_CurrentUpdateIndex)(
+        IDownloadProgress *This,
+        LONG *retval);
+
+    HRESULT (STDMETHODCALLTYPE *get_PercentComplete)(
+        IDownloadProgress *This,
+        LONG *retval);
+
+    HRESULT (STDMETHODCALLTYPE *get_TotalBytesDownloaded)(
+        IDownloadProgress *This,
+        DECIMAL *retval);
+
+    HRESULT (STDMETHODCALLTYPE *get_TotalBytesToDownload)(
+        IDownloadProgress *This,
+        DECIMAL *retval);
+
+    HRESULT (STDMETHODCALLTYPE *GetUpdateResult)(
+        IDownloadProgress *This,
+        LONG updateIndex,
+        IUpdateDownloadResult **retval);
+
+    HRESULT (STDMETHODCALLTYPE *get_CurrentUpdateDownloadPhase)(
+        IDownloadProgress *This,
+        DownloadPhase *retval);
+
+    HRESULT (STDMETHODCALLTYPE *get_CurrentUpdatePercentComplete)(
+        IDownloadProgress *This,
+        LONG *retval);
+
+    END_INTERFACE
+} IDownloadProgressVtbl;
+
+interface IDownloadProgress {
+    CONST_VTBL IDownloadProgressVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IDownloadProgress_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IDownloadProgress_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IDownloadProgress_Release(This) (This)->lpVtbl->Release(This)
+/*** IDispatch methods ***/
+#define IDownloadProgress_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
+#define IDownloadProgress_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+#define IDownloadProgress_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+#define IDownloadProgress_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+/*** IDownloadProgress methods ***/
+#define IDownloadProgress_get_CurrentUpdateBytesDownloaded(This,retval) (This)->lpVtbl->get_CurrentUpdateBytesDownloaded(This,retval)
+#define IDownloadProgress_get_CurrentUpdateBytesToDownload(This,retval) (This)->lpVtbl->get_CurrentUpdateBytesToDownload(This,retval)
+#define IDownloadProgress_get_CurrentUpdateIndex(This,retval) (This)->lpVtbl->get_CurrentUpdateIndex(This,retval)
+#define IDownloadProgress_get_PercentComplete(This,retval) (This)->lpVtbl->get_PercentComplete(This,retval)
+#define IDownloadProgress_get_TotalBytesDownloaded(This,retval) (This)->lpVtbl->get_TotalBytesDownloaded(This,retval)
+#define IDownloadProgress_get_TotalBytesToDownload(This,retval) (This)->lpVtbl->get_TotalBytesToDownload(This,retval)
+#define IDownloadProgress_GetUpdateResult(This,updateIndex,retval) (This)->lpVtbl->GetUpdateResult(This,updateIndex,retval)
+#define IDownloadProgress_get_CurrentUpdateDownloadPhase(This,retval) (This)->lpVtbl->get_CurrentUpdateDownloadPhase(This,retval)
+#define IDownloadProgress_get_CurrentUpdatePercentComplete(This,retval) (This)->lpVtbl->get_CurrentUpdatePercentComplete(This,retval)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IDownloadProgress_QueryInterface(IDownloadProgress* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IDownloadProgress_AddRef(IDownloadProgress* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IDownloadProgress_Release(IDownloadProgress* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDispatch methods ***/
+static FORCEINLINE HRESULT IDownloadProgress_GetTypeInfoCount(IDownloadProgress* This,UINT *pctinfo) {
+    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
+}
+static FORCEINLINE HRESULT IDownloadProgress_GetTypeInfo(IDownloadProgress* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
+    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
+}
+static FORCEINLINE HRESULT IDownloadProgress_GetIDsOfNames(IDownloadProgress* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
+    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
+}
+static FORCEINLINE HRESULT IDownloadProgress_Invoke(IDownloadProgress* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
+    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
+}
+/*** IDownloadProgress methods ***/
+static FORCEINLINE HRESULT IDownloadProgress_get_CurrentUpdateBytesDownloaded(IDownloadProgress* This,DECIMAL *retval) {
+    return This->lpVtbl->get_CurrentUpdateBytesDownloaded(This,retval);
+}
+static FORCEINLINE HRESULT IDownloadProgress_get_CurrentUpdateBytesToDownload(IDownloadProgress* This,DECIMAL *retval) {
+    return This->lpVtbl->get_CurrentUpdateBytesToDownload(This,retval);
+}
+static FORCEINLINE HRESULT IDownloadProgress_get_CurrentUpdateIndex(IDownloadProgress* This,LONG *retval) {
+    return This->lpVtbl->get_CurrentUpdateIndex(This,retval);
+}
+static FORCEINLINE HRESULT IDownloadProgress_get_PercentComplete(IDownloadProgress* This,LONG *retval) {
+    return This->lpVtbl->get_PercentComplete(This,retval);
+}
+static FORCEINLINE HRESULT IDownloadProgress_get_TotalBytesDownloaded(IDownloadProgress* This,DECIMAL *retval) {
+    return This->lpVtbl->get_TotalBytesDownloaded(This,retval);
+}
+static FORCEINLINE HRESULT IDownloadProgress_get_TotalBytesToDownload(IDownloadProgress* This,DECIMAL *retval) {
+    return This->lpVtbl->get_TotalBytesToDownload(This,retval);
+}
+static FORCEINLINE HRESULT IDownloadProgress_GetUpdateResult(IDownloadProgress* This,LONG updateIndex,IUpdateDownloadResult **retval) {
+    return This->lpVtbl->GetUpdateResult(This,updateIndex,retval);
+}
+static FORCEINLINE HRESULT IDownloadProgress_get_CurrentUpdateDownloadPhase(IDownloadProgress* This,DownloadPhase *retval) {
+    return This->lpVtbl->get_CurrentUpdateDownloadPhase(This,retval);
+}
+static FORCEINLINE HRESULT IDownloadProgress_get_CurrentUpdatePercentComplete(IDownloadProgress* This,LONG *retval) {
+    return This->lpVtbl->get_CurrentUpdatePercentComplete(This,retval);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IDownloadProgress_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IDownloadJob interface
+ */
+#ifndef __IDownloadJob_INTERFACE_DEFINED__
+#define __IDownloadJob_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IDownloadJob, 0xc574de85, 0x7358, 0x43f6, 0xaa,0xe8, 0x86,0x97,0xe6,0x2d,0x8b,0xa7);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("c574de85-7358-43f6-aae8-8697e62d8ba7")
+IDownloadJob : public IDispatch
+{
+    virtual HRESULT STDMETHODCALLTYPE get_AsyncState(
+        VARIANT *retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_IsCompleted(
+        VARIANT_BOOL *retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_Updates(
+        IUpdateCollection **retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CleanUp(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetProgress(
+        IDownloadProgress **retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE RequestAbort(
+        ) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IDownloadJob, 0xc574de85, 0x7358, 0x43f6, 0xaa,0xe8, 0x86,0x97,0xe6,0x2d,0x8b,0xa7)
+#endif
+#else
+typedef struct IDownloadJobVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IDownloadJob *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IDownloadJob *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IDownloadJob *This);
+
+    /*** IDispatch methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
+        IDownloadJob *This,
+        UINT *pctinfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
+        IDownloadJob *This,
+        UINT iTInfo,
+        LCID lcid,
+        ITypeInfo **ppTInfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
+        IDownloadJob *This,
+        REFIID riid,
+        LPOLESTR *rgszNames,
+        UINT cNames,
+        LCID lcid,
+        DISPID *rgDispId);
+
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        IDownloadJob *This,
+        DISPID dispIdMember,
+        REFIID riid,
+        LCID lcid,
+        WORD wFlags,
+        DISPPARAMS *pDispParams,
+        VARIANT *pVarResult,
+        EXCEPINFO *pExcepInfo,
+        UINT *puArgErr);
+
+    /*** IDownloadJob methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_AsyncState)(
+        IDownloadJob *This,
+        VARIANT *retval);
+
+    HRESULT (STDMETHODCALLTYPE *get_IsCompleted)(
+        IDownloadJob *This,
+        VARIANT_BOOL *retval);
+
+    HRESULT (STDMETHODCALLTYPE *get_Updates)(
+        IDownloadJob *This,
+        IUpdateCollection **retval);
+
+    HRESULT (STDMETHODCALLTYPE *CleanUp)(
+        IDownloadJob *This);
+
+    HRESULT (STDMETHODCALLTYPE *GetProgress)(
+        IDownloadJob *This,
+        IDownloadProgress **retval);
+
+    HRESULT (STDMETHODCALLTYPE *RequestAbort)(
+        IDownloadJob *This);
+
+    END_INTERFACE
+} IDownloadJobVtbl;
+
+interface IDownloadJob {
+    CONST_VTBL IDownloadJobVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IDownloadJob_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IDownloadJob_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IDownloadJob_Release(This) (This)->lpVtbl->Release(This)
+/*** IDispatch methods ***/
+#define IDownloadJob_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
+#define IDownloadJob_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+#define IDownloadJob_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+#define IDownloadJob_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+/*** IDownloadJob methods ***/
+#define IDownloadJob_get_AsyncState(This,retval) (This)->lpVtbl->get_AsyncState(This,retval)
+#define IDownloadJob_get_IsCompleted(This,retval) (This)->lpVtbl->get_IsCompleted(This,retval)
+#define IDownloadJob_get_Updates(This,retval) (This)->lpVtbl->get_Updates(This,retval)
+#define IDownloadJob_CleanUp(This) (This)->lpVtbl->CleanUp(This)
+#define IDownloadJob_GetProgress(This,retval) (This)->lpVtbl->GetProgress(This,retval)
+#define IDownloadJob_RequestAbort(This) (This)->lpVtbl->RequestAbort(This)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IDownloadJob_QueryInterface(IDownloadJob* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IDownloadJob_AddRef(IDownloadJob* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IDownloadJob_Release(IDownloadJob* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDispatch methods ***/
+static FORCEINLINE HRESULT IDownloadJob_GetTypeInfoCount(IDownloadJob* This,UINT *pctinfo) {
+    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
+}
+static FORCEINLINE HRESULT IDownloadJob_GetTypeInfo(IDownloadJob* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
+    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
+}
+static FORCEINLINE HRESULT IDownloadJob_GetIDsOfNames(IDownloadJob* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
+    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
+}
+static FORCEINLINE HRESULT IDownloadJob_Invoke(IDownloadJob* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
+    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
+}
+/*** IDownloadJob methods ***/
+static FORCEINLINE HRESULT IDownloadJob_get_AsyncState(IDownloadJob* This,VARIANT *retval) {
+    return This->lpVtbl->get_AsyncState(This,retval);
+}
+static FORCEINLINE HRESULT IDownloadJob_get_IsCompleted(IDownloadJob* This,VARIANT_BOOL *retval) {
+    return This->lpVtbl->get_IsCompleted(This,retval);
+}
+static FORCEINLINE HRESULT IDownloadJob_get_Updates(IDownloadJob* This,IUpdateCollection **retval) {
+    return This->lpVtbl->get_Updates(This,retval);
+}
+static FORCEINLINE HRESULT IDownloadJob_CleanUp(IDownloadJob* This) {
+    return This->lpVtbl->CleanUp(This);
+}
+static FORCEINLINE HRESULT IDownloadJob_GetProgress(IDownloadJob* This,IDownloadProgress **retval) {
+    return This->lpVtbl->GetProgress(This,retval);
+}
+static FORCEINLINE HRESULT IDownloadJob_RequestAbort(IDownloadJob* This) {
+    return This->lpVtbl->RequestAbort(This);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IDownloadJob_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IDownloadResult interface
+ */
+#ifndef __IDownloadResult_INTERFACE_DEFINED__
+#define __IDownloadResult_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IDownloadResult, 0xdaa4fdd0, 0x4727, 0x4dbe, 0xa1,0xe7, 0x74,0x5d,0xca,0x31,0x71,0x44);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("daa4fdd0-4727-4dbe-a1e7-745dca317144")
+IDownloadResult : public IDispatch
+{
+    virtual HRESULT STDMETHODCALLTYPE get_HResult(
+        LONG *retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_ResultCode(
+        OperationResultCode *retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetUpdateResult(
+        LONG updateIndex,
+        IUpdateDownloadResult **retval) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IDownloadResult, 0xdaa4fdd0, 0x4727, 0x4dbe, 0xa1,0xe7, 0x74,0x5d,0xca,0x31,0x71,0x44)
+#endif
+#else
+typedef struct IDownloadResultVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IDownloadResult *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IDownloadResult *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IDownloadResult *This);
+
+    /*** IDispatch methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
+        IDownloadResult *This,
+        UINT *pctinfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
+        IDownloadResult *This,
+        UINT iTInfo,
+        LCID lcid,
+        ITypeInfo **ppTInfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
+        IDownloadResult *This,
+        REFIID riid,
+        LPOLESTR *rgszNames,
+        UINT cNames,
+        LCID lcid,
+        DISPID *rgDispId);
+
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        IDownloadResult *This,
+        DISPID dispIdMember,
+        REFIID riid,
+        LCID lcid,
+        WORD wFlags,
+        DISPPARAMS *pDispParams,
+        VARIANT *pVarResult,
+        EXCEPINFO *pExcepInfo,
+        UINT *puArgErr);
+
+    /*** IDownloadResult methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_HResult)(
+        IDownloadResult *This,
+        LONG *retval);
+
+    HRESULT (STDMETHODCALLTYPE *get_ResultCode)(
+        IDownloadResult *This,
+        OperationResultCode *retval);
+
+    HRESULT (STDMETHODCALLTYPE *GetUpdateResult)(
+        IDownloadResult *This,
+        LONG updateIndex,
+        IUpdateDownloadResult **retval);
+
+    END_INTERFACE
+} IDownloadResultVtbl;
+
+interface IDownloadResult {
+    CONST_VTBL IDownloadResultVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IDownloadResult_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IDownloadResult_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IDownloadResult_Release(This) (This)->lpVtbl->Release(This)
+/*** IDispatch methods ***/
+#define IDownloadResult_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
+#define IDownloadResult_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+#define IDownloadResult_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+#define IDownloadResult_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+/*** IDownloadResult methods ***/
+#define IDownloadResult_get_HResult(This,retval) (This)->lpVtbl->get_HResult(This,retval)
+#define IDownloadResult_get_ResultCode(This,retval) (This)->lpVtbl->get_ResultCode(This,retval)
+#define IDownloadResult_GetUpdateResult(This,updateIndex,retval) (This)->lpVtbl->GetUpdateResult(This,updateIndex,retval)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IDownloadResult_QueryInterface(IDownloadResult* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IDownloadResult_AddRef(IDownloadResult* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IDownloadResult_Release(IDownloadResult* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDispatch methods ***/
+static FORCEINLINE HRESULT IDownloadResult_GetTypeInfoCount(IDownloadResult* This,UINT *pctinfo) {
+    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
+}
+static FORCEINLINE HRESULT IDownloadResult_GetTypeInfo(IDownloadResult* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
+    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
+}
+static FORCEINLINE HRESULT IDownloadResult_GetIDsOfNames(IDownloadResult* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
+    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
+}
+static FORCEINLINE HRESULT IDownloadResult_Invoke(IDownloadResult* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
+    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
+}
+/*** IDownloadResult methods ***/
+static FORCEINLINE HRESULT IDownloadResult_get_HResult(IDownloadResult* This,LONG *retval) {
+    return This->lpVtbl->get_HResult(This,retval);
+}
+static FORCEINLINE HRESULT IDownloadResult_get_ResultCode(IDownloadResult* This,OperationResultCode *retval) {
+    return This->lpVtbl->get_ResultCode(This,retval);
+}
+static FORCEINLINE HRESULT IDownloadResult_GetUpdateResult(IDownloadResult* This,LONG updateIndex,IUpdateDownloadResult **retval) {
+    return This->lpVtbl->GetUpdateResult(This,updateIndex,retval);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IDownloadResult_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IUpdateDownloader interface
+ */
+#ifndef __IUpdateDownloader_INTERFACE_DEFINED__
+#define __IUpdateDownloader_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IUpdateDownloader, 0x68f1c6f9, 0x7ecc, 0x4666, 0xa4,0x64, 0x24,0x7f,0xe1,0x24,0x96,0xc3);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("68f1c6f9-7ecc-4666-a464-247fe12496c3")
+IUpdateDownloader : public IDispatch
+{
+    virtual HRESULT STDMETHODCALLTYPE get_ClientApplicationID(
+        BSTR *retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_ClientApplicationID(
+        BSTR value) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_IsForced(
+        VARIANT_BOOL *retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_IsForced(
+        VARIANT_BOOL value) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_Priority(
+        DownloadPriority *retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_Priority(
+        DownloadPriority value) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_Updates(
+        IUpdateCollection **retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_Updates(
+        IUpdateCollection *value) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE BeginDownload(
+        IUnknown *onProgressChanged,
+        IUnknown *onCompleted,
+        VARIANT state,
+        IDownloadJob **retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Download(
+        IDownloadResult **retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE EndDownload(
+        IDownloadJob *value,
+        IDownloadResult **retval) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IUpdateDownloader, 0x68f1c6f9, 0x7ecc, 0x4666, 0xa4,0x64, 0x24,0x7f,0xe1,0x24,0x96,0xc3)
+#endif
+#else
+typedef struct IUpdateDownloaderVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IUpdateDownloader *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IUpdateDownloader *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IUpdateDownloader *This);
+
+    /*** IDispatch methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
+        IUpdateDownloader *This,
+        UINT *pctinfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
+        IUpdateDownloader *This,
+        UINT iTInfo,
+        LCID lcid,
+        ITypeInfo **ppTInfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
+        IUpdateDownloader *This,
+        REFIID riid,
+        LPOLESTR *rgszNames,
+        UINT cNames,
+        LCID lcid,
+        DISPID *rgDispId);
+
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        IUpdateDownloader *This,
+        DISPID dispIdMember,
+        REFIID riid,
+        LCID lcid,
+        WORD wFlags,
+        DISPPARAMS *pDispParams,
+        VARIANT *pVarResult,
+        EXCEPINFO *pExcepInfo,
+        UINT *puArgErr);
+
+    /*** IUpdateDownloader methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_ClientApplicationID)(
+        IUpdateDownloader *This,
+        BSTR *retval);
+
+    HRESULT (STDMETHODCALLTYPE *put_ClientApplicationID)(
+        IUpdateDownloader *This,
+        BSTR value);
+
+    HRESULT (STDMETHODCALLTYPE *get_IsForced)(
+        IUpdateDownloader *This,
+        VARIANT_BOOL *retval);
+
+    HRESULT (STDMETHODCALLTYPE *put_IsForced)(
+        IUpdateDownloader *This,
+        VARIANT_BOOL value);
+
+    HRESULT (STDMETHODCALLTYPE *get_Priority)(
+        IUpdateDownloader *This,
+        DownloadPriority *retval);
+
+    HRESULT (STDMETHODCALLTYPE *put_Priority)(
+        IUpdateDownloader *This,
+        DownloadPriority value);
+
+    HRESULT (STDMETHODCALLTYPE *get_Updates)(
+        IUpdateDownloader *This,
+        IUpdateCollection **retval);
+
+    HRESULT (STDMETHODCALLTYPE *put_Updates)(
+        IUpdateDownloader *This,
+        IUpdateCollection *value);
+
+    HRESULT (STDMETHODCALLTYPE *BeginDownload)(
+        IUpdateDownloader *This,
+        IUnknown *onProgressChanged,
+        IUnknown *onCompleted,
+        VARIANT state,
+        IDownloadJob **retval);
+
+    HRESULT (STDMETHODCALLTYPE *Download)(
+        IUpdateDownloader *This,
+        IDownloadResult **retval);
+
+    HRESULT (STDMETHODCALLTYPE *EndDownload)(
+        IUpdateDownloader *This,
+        IDownloadJob *value,
+        IDownloadResult **retval);
+
+    END_INTERFACE
+} IUpdateDownloaderVtbl;
+
+interface IUpdateDownloader {
+    CONST_VTBL IUpdateDownloaderVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IUpdateDownloader_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IUpdateDownloader_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IUpdateDownloader_Release(This) (This)->lpVtbl->Release(This)
+/*** IDispatch methods ***/
+#define IUpdateDownloader_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
+#define IUpdateDownloader_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+#define IUpdateDownloader_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+#define IUpdateDownloader_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+/*** IUpdateDownloader methods ***/
+#define IUpdateDownloader_get_ClientApplicationID(This,retval) (This)->lpVtbl->get_ClientApplicationID(This,retval)
+#define IUpdateDownloader_put_ClientApplicationID(This,value) (This)->lpVtbl->put_ClientApplicationID(This,value)
+#define IUpdateDownloader_get_IsForced(This,retval) (This)->lpVtbl->get_IsForced(This,retval)
+#define IUpdateDownloader_put_IsForced(This,value) (This)->lpVtbl->put_IsForced(This,value)
+#define IUpdateDownloader_get_Priority(This,retval) (This)->lpVtbl->get_Priority(This,retval)
+#define IUpdateDownloader_put_Priority(This,value) (This)->lpVtbl->put_Priority(This,value)
+#define IUpdateDownloader_get_Updates(This,retval) (This)->lpVtbl->get_Updates(This,retval)
+#define IUpdateDownloader_put_Updates(This,value) (This)->lpVtbl->put_Updates(This,value)
+#define IUpdateDownloader_BeginDownload(This,onProgressChanged,onCompleted,state,retval) (This)->lpVtbl->BeginDownload(This,onProgressChanged,onCompleted,state,retval)
+#define IUpdateDownloader_Download(This,retval) (This)->lpVtbl->Download(This,retval)
+#define IUpdateDownloader_EndDownload(This,value,retval) (This)->lpVtbl->EndDownload(This,value,retval)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IUpdateDownloader_QueryInterface(IUpdateDownloader* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IUpdateDownloader_AddRef(IUpdateDownloader* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IUpdateDownloader_Release(IUpdateDownloader* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDispatch methods ***/
+static FORCEINLINE HRESULT IUpdateDownloader_GetTypeInfoCount(IUpdateDownloader* This,UINT *pctinfo) {
+    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
+}
+static FORCEINLINE HRESULT IUpdateDownloader_GetTypeInfo(IUpdateDownloader* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
+    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
+}
+static FORCEINLINE HRESULT IUpdateDownloader_GetIDsOfNames(IUpdateDownloader* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
+    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
+}
+static FORCEINLINE HRESULT IUpdateDownloader_Invoke(IUpdateDownloader* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
+    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
+}
+/*** IUpdateDownloader methods ***/
+static FORCEINLINE HRESULT IUpdateDownloader_get_ClientApplicationID(IUpdateDownloader* This,BSTR *retval) {
+    return This->lpVtbl->get_ClientApplicationID(This,retval);
+}
+static FORCEINLINE HRESULT IUpdateDownloader_put_ClientApplicationID(IUpdateDownloader* This,BSTR value) {
+    return This->lpVtbl->put_ClientApplicationID(This,value);
+}
+static FORCEINLINE HRESULT IUpdateDownloader_get_IsForced(IUpdateDownloader* This,VARIANT_BOOL *retval) {
+    return This->lpVtbl->get_IsForced(This,retval);
+}
+static FORCEINLINE HRESULT IUpdateDownloader_put_IsForced(IUpdateDownloader* This,VARIANT_BOOL value) {
+    return This->lpVtbl->put_IsForced(This,value);
+}
+static FORCEINLINE HRESULT IUpdateDownloader_get_Priority(IUpdateDownloader* This,DownloadPriority *retval) {
+    return This->lpVtbl->get_Priority(This,retval);
+}
+static FORCEINLINE HRESULT IUpdateDownloader_put_Priority(IUpdateDownloader* This,DownloadPriority value) {
+    return This->lpVtbl->put_Priority(This,value);
+}
+static FORCEINLINE HRESULT IUpdateDownloader_get_Updates(IUpdateDownloader* This,IUpdateCollection **retval) {
+    return This->lpVtbl->get_Updates(This,retval);
+}
+static FORCEINLINE HRESULT IUpdateDownloader_put_Updates(IUpdateDownloader* This,IUpdateCollection *value) {
+    return This->lpVtbl->put_Updates(This,value);
+}
+static FORCEINLINE HRESULT IUpdateDownloader_BeginDownload(IUpdateDownloader* This,IUnknown *onProgressChanged,IUnknown *onCompleted,VARIANT state,IDownloadJob **retval) {
+    return This->lpVtbl->BeginDownload(This,onProgressChanged,onCompleted,state,retval);
+}
+static FORCEINLINE HRESULT IUpdateDownloader_Download(IUpdateDownloader* This,IDownloadResult **retval) {
+    return This->lpVtbl->Download(This,retval);
+}
+static FORCEINLINE HRESULT IUpdateDownloader_EndDownload(IUpdateDownloader* This,IDownloadJob *value,IDownloadResult **retval) {
+    return This->lpVtbl->EndDownload(This,value,retval);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IUpdateDownloader_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IUpdateInstallationResult interface
+ */
+#ifndef __IUpdateInstallationResult_INTERFACE_DEFINED__
+#define __IUpdateInstallationResult_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IUpdateInstallationResult, 0xd940f0f8, 0x3cbb, 0x4fd0, 0x99,0x3f, 0x47,0x1e,0x7f,0x23,0x28,0xad);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("d940f0f8-3cbb-4fd0-993f-471e7f2328ad")
+IUpdateInstallationResult : public IDispatch
+{
+    virtual HRESULT STDMETHODCALLTYPE get_HResult(
+        LONG *retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_RebootRequired(
+        VARIANT_BOOL *retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_ResultCode(
+        OperationResultCode *retval) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IUpdateInstallationResult, 0xd940f0f8, 0x3cbb, 0x4fd0, 0x99,0x3f, 0x47,0x1e,0x7f,0x23,0x28,0xad)
+#endif
+#else
+typedef struct IUpdateInstallationResultVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IUpdateInstallationResult *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IUpdateInstallationResult *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IUpdateInstallationResult *This);
+
+    /*** IDispatch methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
+        IUpdateInstallationResult *This,
+        UINT *pctinfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
+        IUpdateInstallationResult *This,
+        UINT iTInfo,
+        LCID lcid,
+        ITypeInfo **ppTInfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
+        IUpdateInstallationResult *This,
+        REFIID riid,
+        LPOLESTR *rgszNames,
+        UINT cNames,
+        LCID lcid,
+        DISPID *rgDispId);
+
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        IUpdateInstallationResult *This,
+        DISPID dispIdMember,
+        REFIID riid,
+        LCID lcid,
+        WORD wFlags,
+        DISPPARAMS *pDispParams,
+        VARIANT *pVarResult,
+        EXCEPINFO *pExcepInfo,
+        UINT *puArgErr);
+
+    /*** IUpdateInstallationResult methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_HResult)(
+        IUpdateInstallationResult *This,
+        LONG *retval);
+
+    HRESULT (STDMETHODCALLTYPE *get_RebootRequired)(
+        IUpdateInstallationResult *This,
+        VARIANT_BOOL *retval);
+
+    HRESULT (STDMETHODCALLTYPE *get_ResultCode)(
+        IUpdateInstallationResult *This,
+        OperationResultCode *retval);
+
+    END_INTERFACE
+} IUpdateInstallationResultVtbl;
+
+interface IUpdateInstallationResult {
+    CONST_VTBL IUpdateInstallationResultVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IUpdateInstallationResult_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IUpdateInstallationResult_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IUpdateInstallationResult_Release(This) (This)->lpVtbl->Release(This)
+/*** IDispatch methods ***/
+#define IUpdateInstallationResult_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
+#define IUpdateInstallationResult_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+#define IUpdateInstallationResult_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+#define IUpdateInstallationResult_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+/*** IUpdateInstallationResult methods ***/
+#define IUpdateInstallationResult_get_HResult(This,retval) (This)->lpVtbl->get_HResult(This,retval)
+#define IUpdateInstallationResult_get_RebootRequired(This,retval) (This)->lpVtbl->get_RebootRequired(This,retval)
+#define IUpdateInstallationResult_get_ResultCode(This,retval) (This)->lpVtbl->get_ResultCode(This,retval)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IUpdateInstallationResult_QueryInterface(IUpdateInstallationResult* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IUpdateInstallationResult_AddRef(IUpdateInstallationResult* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IUpdateInstallationResult_Release(IUpdateInstallationResult* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDispatch methods ***/
+static FORCEINLINE HRESULT IUpdateInstallationResult_GetTypeInfoCount(IUpdateInstallationResult* This,UINT *pctinfo) {
+    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
+}
+static FORCEINLINE HRESULT IUpdateInstallationResult_GetTypeInfo(IUpdateInstallationResult* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
+    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
+}
+static FORCEINLINE HRESULT IUpdateInstallationResult_GetIDsOfNames(IUpdateInstallationResult* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
+    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
+}
+static FORCEINLINE HRESULT IUpdateInstallationResult_Invoke(IUpdateInstallationResult* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
+    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
+}
+/*** IUpdateInstallationResult methods ***/
+static FORCEINLINE HRESULT IUpdateInstallationResult_get_HResult(IUpdateInstallationResult* This,LONG *retval) {
+    return This->lpVtbl->get_HResult(This,retval);
+}
+static FORCEINLINE HRESULT IUpdateInstallationResult_get_RebootRequired(IUpdateInstallationResult* This,VARIANT_BOOL *retval) {
+    return This->lpVtbl->get_RebootRequired(This,retval);
+}
+static FORCEINLINE HRESULT IUpdateInstallationResult_get_ResultCode(IUpdateInstallationResult* This,OperationResultCode *retval) {
+    return This->lpVtbl->get_ResultCode(This,retval);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IUpdateInstallationResult_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IInstallationProgress interface
+ */
+#ifndef __IInstallationProgress_INTERFACE_DEFINED__
+#define __IInstallationProgress_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IInstallationProgress, 0x345c8244, 0x43a3, 0x4e32, 0xa3,0x68, 0x65,0xf0,0x73,0xb7,0x6f,0x36);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("345c8244-43a3-4e32-a368-65f073b76f36")
+IInstallationProgress : public IDispatch
+{
+    virtual HRESULT STDMETHODCALLTYPE get_CurrentUpdateIndex(
+        LONG *retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_CurrentUpdatePercentComplete(
+        LONG *retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_PercentComplete(
+        LONG *retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetUpdateResult(
+        LONG updateIndex,
+        IUpdateInstallationResult **retval) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IInstallationProgress, 0x345c8244, 0x43a3, 0x4e32, 0xa3,0x68, 0x65,0xf0,0x73,0xb7,0x6f,0x36)
+#endif
+#else
+typedef struct IInstallationProgressVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IInstallationProgress *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IInstallationProgress *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IInstallationProgress *This);
+
+    /*** IDispatch methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
+        IInstallationProgress *This,
+        UINT *pctinfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
+        IInstallationProgress *This,
+        UINT iTInfo,
+        LCID lcid,
+        ITypeInfo **ppTInfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
+        IInstallationProgress *This,
+        REFIID riid,
+        LPOLESTR *rgszNames,
+        UINT cNames,
+        LCID lcid,
+        DISPID *rgDispId);
+
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        IInstallationProgress *This,
+        DISPID dispIdMember,
+        REFIID riid,
+        LCID lcid,
+        WORD wFlags,
+        DISPPARAMS *pDispParams,
+        VARIANT *pVarResult,
+        EXCEPINFO *pExcepInfo,
+        UINT *puArgErr);
+
+    /*** IInstallationProgress methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_CurrentUpdateIndex)(
+        IInstallationProgress *This,
+        LONG *retval);
+
+    HRESULT (STDMETHODCALLTYPE *get_CurrentUpdatePercentComplete)(
+        IInstallationProgress *This,
+        LONG *retval);
+
+    HRESULT (STDMETHODCALLTYPE *get_PercentComplete)(
+        IInstallationProgress *This,
+        LONG *retval);
+
+    HRESULT (STDMETHODCALLTYPE *GetUpdateResult)(
+        IInstallationProgress *This,
+        LONG updateIndex,
+        IUpdateInstallationResult **retval);
+
+    END_INTERFACE
+} IInstallationProgressVtbl;
+
+interface IInstallationProgress {
+    CONST_VTBL IInstallationProgressVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IInstallationProgress_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IInstallationProgress_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IInstallationProgress_Release(This) (This)->lpVtbl->Release(This)
+/*** IDispatch methods ***/
+#define IInstallationProgress_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
+#define IInstallationProgress_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+#define IInstallationProgress_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+#define IInstallationProgress_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+/*** IInstallationProgress methods ***/
+#define IInstallationProgress_get_CurrentUpdateIndex(This,retval) (This)->lpVtbl->get_CurrentUpdateIndex(This,retval)
+#define IInstallationProgress_get_CurrentUpdatePercentComplete(This,retval) (This)->lpVtbl->get_CurrentUpdatePercentComplete(This,retval)
+#define IInstallationProgress_get_PercentComplete(This,retval) (This)->lpVtbl->get_PercentComplete(This,retval)
+#define IInstallationProgress_GetUpdateResult(This,updateIndex,retval) (This)->lpVtbl->GetUpdateResult(This,updateIndex,retval)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IInstallationProgress_QueryInterface(IInstallationProgress* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IInstallationProgress_AddRef(IInstallationProgress* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IInstallationProgress_Release(IInstallationProgress* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDispatch methods ***/
+static FORCEINLINE HRESULT IInstallationProgress_GetTypeInfoCount(IInstallationProgress* This,UINT *pctinfo) {
+    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
+}
+static FORCEINLINE HRESULT IInstallationProgress_GetTypeInfo(IInstallationProgress* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
+    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
+}
+static FORCEINLINE HRESULT IInstallationProgress_GetIDsOfNames(IInstallationProgress* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
+    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
+}
+static FORCEINLINE HRESULT IInstallationProgress_Invoke(IInstallationProgress* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
+    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
+}
+/*** IInstallationProgress methods ***/
+static FORCEINLINE HRESULT IInstallationProgress_get_CurrentUpdateIndex(IInstallationProgress* This,LONG *retval) {
+    return This->lpVtbl->get_CurrentUpdateIndex(This,retval);
+}
+static FORCEINLINE HRESULT IInstallationProgress_get_CurrentUpdatePercentComplete(IInstallationProgress* This,LONG *retval) {
+    return This->lpVtbl->get_CurrentUpdatePercentComplete(This,retval);
+}
+static FORCEINLINE HRESULT IInstallationProgress_get_PercentComplete(IInstallationProgress* This,LONG *retval) {
+    return This->lpVtbl->get_PercentComplete(This,retval);
+}
+static FORCEINLINE HRESULT IInstallationProgress_GetUpdateResult(IInstallationProgress* This,LONG updateIndex,IUpdateInstallationResult **retval) {
+    return This->lpVtbl->GetUpdateResult(This,updateIndex,retval);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IInstallationProgress_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IInstallationJob interface
+ */
+#ifndef __IInstallationJob_INTERFACE_DEFINED__
+#define __IInstallationJob_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IInstallationJob, 0x5c209f0b, 0xbad5, 0x432a, 0x95,0x56, 0x46,0x99,0xbe,0xd2,0x63,0x8a);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("5c209f0b-bad5-432a-9556-4699bed2638a")
+IInstallationJob : public IDispatch
+{
+    virtual HRESULT STDMETHODCALLTYPE get_AsyncState(
+        VARIANT *retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_IsCompleted(
+        VARIANT_BOOL *retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_Updates(
+        IUpdateCollection **retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CleanUp(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetProgress(
+        IInstallationProgress **retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE RequestAbort(
+        ) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IInstallationJob, 0x5c209f0b, 0xbad5, 0x432a, 0x95,0x56, 0x46,0x99,0xbe,0xd2,0x63,0x8a)
+#endif
+#else
+typedef struct IInstallationJobVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IInstallationJob *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IInstallationJob *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IInstallationJob *This);
+
+    /*** IDispatch methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
+        IInstallationJob *This,
+        UINT *pctinfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
+        IInstallationJob *This,
+        UINT iTInfo,
+        LCID lcid,
+        ITypeInfo **ppTInfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
+        IInstallationJob *This,
+        REFIID riid,
+        LPOLESTR *rgszNames,
+        UINT cNames,
+        LCID lcid,
+        DISPID *rgDispId);
+
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        IInstallationJob *This,
+        DISPID dispIdMember,
+        REFIID riid,
+        LCID lcid,
+        WORD wFlags,
+        DISPPARAMS *pDispParams,
+        VARIANT *pVarResult,
+        EXCEPINFO *pExcepInfo,
+        UINT *puArgErr);
+
+    /*** IInstallationJob methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_AsyncState)(
+        IInstallationJob *This,
+        VARIANT *retval);
+
+    HRESULT (STDMETHODCALLTYPE *get_IsCompleted)(
+        IInstallationJob *This,
+        VARIANT_BOOL *retval);
+
+    HRESULT (STDMETHODCALLTYPE *get_Updates)(
+        IInstallationJob *This,
+        IUpdateCollection **retval);
+
+    HRESULT (STDMETHODCALLTYPE *CleanUp)(
+        IInstallationJob *This);
+
+    HRESULT (STDMETHODCALLTYPE *GetProgress)(
+        IInstallationJob *This,
+        IInstallationProgress **retval);
+
+    HRESULT (STDMETHODCALLTYPE *RequestAbort)(
+        IInstallationJob *This);
+
+    END_INTERFACE
+} IInstallationJobVtbl;
+
+interface IInstallationJob {
+    CONST_VTBL IInstallationJobVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IInstallationJob_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IInstallationJob_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IInstallationJob_Release(This) (This)->lpVtbl->Release(This)
+/*** IDispatch methods ***/
+#define IInstallationJob_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
+#define IInstallationJob_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+#define IInstallationJob_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+#define IInstallationJob_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+/*** IInstallationJob methods ***/
+#define IInstallationJob_get_AsyncState(This,retval) (This)->lpVtbl->get_AsyncState(This,retval)
+#define IInstallationJob_get_IsCompleted(This,retval) (This)->lpVtbl->get_IsCompleted(This,retval)
+#define IInstallationJob_get_Updates(This,retval) (This)->lpVtbl->get_Updates(This,retval)
+#define IInstallationJob_CleanUp(This) (This)->lpVtbl->CleanUp(This)
+#define IInstallationJob_GetProgress(This,retval) (This)->lpVtbl->GetProgress(This,retval)
+#define IInstallationJob_RequestAbort(This) (This)->lpVtbl->RequestAbort(This)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IInstallationJob_QueryInterface(IInstallationJob* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IInstallationJob_AddRef(IInstallationJob* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IInstallationJob_Release(IInstallationJob* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDispatch methods ***/
+static FORCEINLINE HRESULT IInstallationJob_GetTypeInfoCount(IInstallationJob* This,UINT *pctinfo) {
+    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
+}
+static FORCEINLINE HRESULT IInstallationJob_GetTypeInfo(IInstallationJob* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
+    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
+}
+static FORCEINLINE HRESULT IInstallationJob_GetIDsOfNames(IInstallationJob* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
+    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
+}
+static FORCEINLINE HRESULT IInstallationJob_Invoke(IInstallationJob* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
+    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
+}
+/*** IInstallationJob methods ***/
+static FORCEINLINE HRESULT IInstallationJob_get_AsyncState(IInstallationJob* This,VARIANT *retval) {
+    return This->lpVtbl->get_AsyncState(This,retval);
+}
+static FORCEINLINE HRESULT IInstallationJob_get_IsCompleted(IInstallationJob* This,VARIANT_BOOL *retval) {
+    return This->lpVtbl->get_IsCompleted(This,retval);
+}
+static FORCEINLINE HRESULT IInstallationJob_get_Updates(IInstallationJob* This,IUpdateCollection **retval) {
+    return This->lpVtbl->get_Updates(This,retval);
+}
+static FORCEINLINE HRESULT IInstallationJob_CleanUp(IInstallationJob* This) {
+    return This->lpVtbl->CleanUp(This);
+}
+static FORCEINLINE HRESULT IInstallationJob_GetProgress(IInstallationJob* This,IInstallationProgress **retval) {
+    return This->lpVtbl->GetProgress(This,retval);
+}
+static FORCEINLINE HRESULT IInstallationJob_RequestAbort(IInstallationJob* This) {
+    return This->lpVtbl->RequestAbort(This);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IInstallationJob_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IInstallationResult interface
+ */
+#ifndef __IInstallationResult_INTERFACE_DEFINED__
+#define __IInstallationResult_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IInstallationResult, 0xa43c56d6, 0x7451, 0x48d4, 0xaf,0x96, 0xb6,0xcd,0x2d,0x0d,0x9b,0x7a);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("a43c56d6-7451-48d4-af96-b6cd2d0d9b7a")
+IInstallationResult : public IDispatch
+{
+    virtual HRESULT STDMETHODCALLTYPE get_HResult(
+        LONG *retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_RebootRequired(
+        VARIANT_BOOL *retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_ResultCode(
+        OperationResultCode *retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetUpdateResult(
+        LONG updateIndex,
+        IUpdateInstallationResult **retval) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IInstallationResult, 0xa43c56d6, 0x7451, 0x48d4, 0xaf,0x96, 0xb6,0xcd,0x2d,0x0d,0x9b,0x7a)
+#endif
+#else
+typedef struct IInstallationResultVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IInstallationResult *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IInstallationResult *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IInstallationResult *This);
+
+    /*** IDispatch methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
+        IInstallationResult *This,
+        UINT *pctinfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
+        IInstallationResult *This,
+        UINT iTInfo,
+        LCID lcid,
+        ITypeInfo **ppTInfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
+        IInstallationResult *This,
+        REFIID riid,
+        LPOLESTR *rgszNames,
+        UINT cNames,
+        LCID lcid,
+        DISPID *rgDispId);
+
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        IInstallationResult *This,
+        DISPID dispIdMember,
+        REFIID riid,
+        LCID lcid,
+        WORD wFlags,
+        DISPPARAMS *pDispParams,
+        VARIANT *pVarResult,
+        EXCEPINFO *pExcepInfo,
+        UINT *puArgErr);
+
+    /*** IInstallationResult methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_HResult)(
+        IInstallationResult *This,
+        LONG *retval);
+
+    HRESULT (STDMETHODCALLTYPE *get_RebootRequired)(
+        IInstallationResult *This,
+        VARIANT_BOOL *retval);
+
+    HRESULT (STDMETHODCALLTYPE *get_ResultCode)(
+        IInstallationResult *This,
+        OperationResultCode *retval);
+
+    HRESULT (STDMETHODCALLTYPE *GetUpdateResult)(
+        IInstallationResult *This,
+        LONG updateIndex,
+        IUpdateInstallationResult **retval);
+
+    END_INTERFACE
+} IInstallationResultVtbl;
+
+interface IInstallationResult {
+    CONST_VTBL IInstallationResultVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IInstallationResult_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IInstallationResult_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IInstallationResult_Release(This) (This)->lpVtbl->Release(This)
+/*** IDispatch methods ***/
+#define IInstallationResult_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
+#define IInstallationResult_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+#define IInstallationResult_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+#define IInstallationResult_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+/*** IInstallationResult methods ***/
+#define IInstallationResult_get_HResult(This,retval) (This)->lpVtbl->get_HResult(This,retval)
+#define IInstallationResult_get_RebootRequired(This,retval) (This)->lpVtbl->get_RebootRequired(This,retval)
+#define IInstallationResult_get_ResultCode(This,retval) (This)->lpVtbl->get_ResultCode(This,retval)
+#define IInstallationResult_GetUpdateResult(This,updateIndex,retval) (This)->lpVtbl->GetUpdateResult(This,updateIndex,retval)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IInstallationResult_QueryInterface(IInstallationResult* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IInstallationResult_AddRef(IInstallationResult* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IInstallationResult_Release(IInstallationResult* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDispatch methods ***/
+static FORCEINLINE HRESULT IInstallationResult_GetTypeInfoCount(IInstallationResult* This,UINT *pctinfo) {
+    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
+}
+static FORCEINLINE HRESULT IInstallationResult_GetTypeInfo(IInstallationResult* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
+    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
+}
+static FORCEINLINE HRESULT IInstallationResult_GetIDsOfNames(IInstallationResult* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
+    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
+}
+static FORCEINLINE HRESULT IInstallationResult_Invoke(IInstallationResult* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
+    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
+}
+/*** IInstallationResult methods ***/
+static FORCEINLINE HRESULT IInstallationResult_get_HResult(IInstallationResult* This,LONG *retval) {
+    return This->lpVtbl->get_HResult(This,retval);
+}
+static FORCEINLINE HRESULT IInstallationResult_get_RebootRequired(IInstallationResult* This,VARIANT_BOOL *retval) {
+    return This->lpVtbl->get_RebootRequired(This,retval);
+}
+static FORCEINLINE HRESULT IInstallationResult_get_ResultCode(IInstallationResult* This,OperationResultCode *retval) {
+    return This->lpVtbl->get_ResultCode(This,retval);
+}
+static FORCEINLINE HRESULT IInstallationResult_GetUpdateResult(IInstallationResult* This,LONG updateIndex,IUpdateInstallationResult **retval) {
+    return This->lpVtbl->GetUpdateResult(This,updateIndex,retval);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IInstallationResult_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IUpdateInstaller interface
+ */
+#ifndef __IUpdateInstaller_INTERFACE_DEFINED__
+#define __IUpdateInstaller_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IUpdateInstaller, 0x7b929c68, 0xccdc, 0x4226, 0x96,0xb1, 0x87,0x24,0x60,0x0b,0x54,0xc2);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("7b929c68-ccdc-4226-96b1-8724600b54c2")
+IUpdateInstaller : public IDispatch
+{
+    virtual HRESULT STDMETHODCALLTYPE get_ClientApplicationID(
+        BSTR *retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_ClientApplicationID(
+        BSTR value) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_IsForced(
+        VARIANT_BOOL *retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_IsForced(
+        VARIANT_BOOL value) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_ParentHwnd(
+        HWND *retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_ParentHwnd(
+        HWND value) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_ParentWindow(
+        IUnknown *value) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_ParentWindow(
+        IUnknown **retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_Updates(
+        IUpdateCollection **retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_Updates(
+        IUpdateCollection *value) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE BeginInstall(
+        IUnknown *onProgressChanged,
+        IUnknown *onCompleted,
+        VARIANT state,
+        IInstallationJob **retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE BeginUninstall(
+        IUnknown *onProgressChanged,
+        IUnknown *onCompleted,
+        VARIANT state,
+        IInstallationJob **retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE EndInstall(
+        IInstallationJob *value,
+        IInstallationResult **retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE EndUninstall(
+        IInstallationJob *value,
+        IInstallationResult **retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Install(
+        IInstallationResult **retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE RunWizard(
+        BSTR dialogTitle,
+        IInstallationResult **retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_IsBusy(
+        VARIANT_BOOL *retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Uninstall(
+        IInstallationResult **retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_AllowSourcePrompts(
+        VARIANT_BOOL *retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_AllowSourcePrompts(
+        VARIANT_BOOL value) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_RebootRequiredBeforeInstallation(
+        VARIANT_BOOL *retval) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IUpdateInstaller, 0x7b929c68, 0xccdc, 0x4226, 0x96,0xb1, 0x87,0x24,0x60,0x0b,0x54,0xc2)
+#endif
+#else
+typedef struct IUpdateInstallerVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IUpdateInstaller *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IUpdateInstaller *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IUpdateInstaller *This);
+
+    /*** IDispatch methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
+        IUpdateInstaller *This,
+        UINT *pctinfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
+        IUpdateInstaller *This,
+        UINT iTInfo,
+        LCID lcid,
+        ITypeInfo **ppTInfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
+        IUpdateInstaller *This,
+        REFIID riid,
+        LPOLESTR *rgszNames,
+        UINT cNames,
+        LCID lcid,
+        DISPID *rgDispId);
+
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        IUpdateInstaller *This,
+        DISPID dispIdMember,
+        REFIID riid,
+        LCID lcid,
+        WORD wFlags,
+        DISPPARAMS *pDispParams,
+        VARIANT *pVarResult,
+        EXCEPINFO *pExcepInfo,
+        UINT *puArgErr);
+
+    /*** IUpdateInstaller methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_ClientApplicationID)(
+        IUpdateInstaller *This,
+        BSTR *retval);
+
+    HRESULT (STDMETHODCALLTYPE *put_ClientApplicationID)(
+        IUpdateInstaller *This,
+        BSTR value);
+
+    HRESULT (STDMETHODCALLTYPE *get_IsForced)(
+        IUpdateInstaller *This,
+        VARIANT_BOOL *retval);
+
+    HRESULT (STDMETHODCALLTYPE *put_IsForced)(
+        IUpdateInstaller *This,
+        VARIANT_BOOL value);
+
+    HRESULT (STDMETHODCALLTYPE *get_ParentHwnd)(
+        IUpdateInstaller *This,
+        HWND *retval);
+
+    HRESULT (STDMETHODCALLTYPE *put_ParentHwnd)(
+        IUpdateInstaller *This,
+        HWND value);
+
+    HRESULT (STDMETHODCALLTYPE *put_ParentWindow)(
+        IUpdateInstaller *This,
+        IUnknown *value);
+
+    HRESULT (STDMETHODCALLTYPE *get_ParentWindow)(
+        IUpdateInstaller *This,
+        IUnknown **retval);
+
+    HRESULT (STDMETHODCALLTYPE *get_Updates)(
+        IUpdateInstaller *This,
+        IUpdateCollection **retval);
+
+    HRESULT (STDMETHODCALLTYPE *put_Updates)(
+        IUpdateInstaller *This,
+        IUpdateCollection *value);
+
+    HRESULT (STDMETHODCALLTYPE *BeginInstall)(
+        IUpdateInstaller *This,
+        IUnknown *onProgressChanged,
+        IUnknown *onCompleted,
+        VARIANT state,
+        IInstallationJob **retval);
+
+    HRESULT (STDMETHODCALLTYPE *BeginUninstall)(
+        IUpdateInstaller *This,
+        IUnknown *onProgressChanged,
+        IUnknown *onCompleted,
+        VARIANT state,
+        IInstallationJob **retval);
+
+    HRESULT (STDMETHODCALLTYPE *EndInstall)(
+        IUpdateInstaller *This,
+        IInstallationJob *value,
+        IInstallationResult **retval);
+
+    HRESULT (STDMETHODCALLTYPE *EndUninstall)(
+        IUpdateInstaller *This,
+        IInstallationJob *value,
+        IInstallationResult **retval);
+
+    HRESULT (STDMETHODCALLTYPE *Install)(
+        IUpdateInstaller *This,
+        IInstallationResult **retval);
+
+    HRESULT (STDMETHODCALLTYPE *RunWizard)(
+        IUpdateInstaller *This,
+        BSTR dialogTitle,
+        IInstallationResult **retval);
+
+    HRESULT (STDMETHODCALLTYPE *get_IsBusy)(
+        IUpdateInstaller *This,
+        VARIANT_BOOL *retval);
+
+    HRESULT (STDMETHODCALLTYPE *Uninstall)(
+        IUpdateInstaller *This,
+        IInstallationResult **retval);
+
+    HRESULT (STDMETHODCALLTYPE *get_AllowSourcePrompts)(
+        IUpdateInstaller *This,
+        VARIANT_BOOL *retval);
+
+    HRESULT (STDMETHODCALLTYPE *put_AllowSourcePrompts)(
+        IUpdateInstaller *This,
+        VARIANT_BOOL value);
+
+    HRESULT (STDMETHODCALLTYPE *get_RebootRequiredBeforeInstallation)(
+        IUpdateInstaller *This,
+        VARIANT_BOOL *retval);
+
+    END_INTERFACE
+} IUpdateInstallerVtbl;
+
+interface IUpdateInstaller {
+    CONST_VTBL IUpdateInstallerVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IUpdateInstaller_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IUpdateInstaller_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IUpdateInstaller_Release(This) (This)->lpVtbl->Release(This)
+/*** IDispatch methods ***/
+#define IUpdateInstaller_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
+#define IUpdateInstaller_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+#define IUpdateInstaller_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+#define IUpdateInstaller_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+/*** IUpdateInstaller methods ***/
+#define IUpdateInstaller_get_ClientApplicationID(This,retval) (This)->lpVtbl->get_ClientApplicationID(This,retval)
+#define IUpdateInstaller_put_ClientApplicationID(This,value) (This)->lpVtbl->put_ClientApplicationID(This,value)
+#define IUpdateInstaller_get_IsForced(This,retval) (This)->lpVtbl->get_IsForced(This,retval)
+#define IUpdateInstaller_put_IsForced(This,value) (This)->lpVtbl->put_IsForced(This,value)
+#define IUpdateInstaller_get_ParentHwnd(This,retval) (This)->lpVtbl->get_ParentHwnd(This,retval)
+#define IUpdateInstaller_put_ParentHwnd(This,value) (This)->lpVtbl->put_ParentHwnd(This,value)
+#define IUpdateInstaller_put_ParentWindow(This,value) (This)->lpVtbl->put_ParentWindow(This,value)
+#define IUpdateInstaller_get_ParentWindow(This,retval) (This)->lpVtbl->get_ParentWindow(This,retval)
+#define IUpdateInstaller_get_Updates(This,retval) (This)->lpVtbl->get_Updates(This,retval)
+#define IUpdateInstaller_put_Updates(This,value) (This)->lpVtbl->put_Updates(This,value)
+#define IUpdateInstaller_BeginInstall(This,onProgressChanged,onCompleted,state,retval) (This)->lpVtbl->BeginInstall(This,onProgressChanged,onCompleted,state,retval)
+#define IUpdateInstaller_BeginUninstall(This,onProgressChanged,onCompleted,state,retval) (This)->lpVtbl->BeginUninstall(This,onProgressChanged,onCompleted,state,retval)
+#define IUpdateInstaller_EndInstall(This,value,retval) (This)->lpVtbl->EndInstall(This,value,retval)
+#define IUpdateInstaller_EndUninstall(This,value,retval) (This)->lpVtbl->EndUninstall(This,value,retval)
+#define IUpdateInstaller_Install(This,retval) (This)->lpVtbl->Install(This,retval)
+#define IUpdateInstaller_RunWizard(This,dialogTitle,retval) (This)->lpVtbl->RunWizard(This,dialogTitle,retval)
+#define IUpdateInstaller_get_IsBusy(This,retval) (This)->lpVtbl->get_IsBusy(This,retval)
+#define IUpdateInstaller_Uninstall(This,retval) (This)->lpVtbl->Uninstall(This,retval)
+#define IUpdateInstaller_get_AllowSourcePrompts(This,retval) (This)->lpVtbl->get_AllowSourcePrompts(This,retval)
+#define IUpdateInstaller_put_AllowSourcePrompts(This,value) (This)->lpVtbl->put_AllowSourcePrompts(This,value)
+#define IUpdateInstaller_get_RebootRequiredBeforeInstallation(This,retval) (This)->lpVtbl->get_RebootRequiredBeforeInstallation(This,retval)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IUpdateInstaller_QueryInterface(IUpdateInstaller* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IUpdateInstaller_AddRef(IUpdateInstaller* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IUpdateInstaller_Release(IUpdateInstaller* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDispatch methods ***/
+static FORCEINLINE HRESULT IUpdateInstaller_GetTypeInfoCount(IUpdateInstaller* This,UINT *pctinfo) {
+    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
+}
+static FORCEINLINE HRESULT IUpdateInstaller_GetTypeInfo(IUpdateInstaller* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
+    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
+}
+static FORCEINLINE HRESULT IUpdateInstaller_GetIDsOfNames(IUpdateInstaller* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
+    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
+}
+static FORCEINLINE HRESULT IUpdateInstaller_Invoke(IUpdateInstaller* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
+    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
+}
+/*** IUpdateInstaller methods ***/
+static FORCEINLINE HRESULT IUpdateInstaller_get_ClientApplicationID(IUpdateInstaller* This,BSTR *retval) {
+    return This->lpVtbl->get_ClientApplicationID(This,retval);
+}
+static FORCEINLINE HRESULT IUpdateInstaller_put_ClientApplicationID(IUpdateInstaller* This,BSTR value) {
+    return This->lpVtbl->put_ClientApplicationID(This,value);
+}
+static FORCEINLINE HRESULT IUpdateInstaller_get_IsForced(IUpdateInstaller* This,VARIANT_BOOL *retval) {
+    return This->lpVtbl->get_IsForced(This,retval);
+}
+static FORCEINLINE HRESULT IUpdateInstaller_put_IsForced(IUpdateInstaller* This,VARIANT_BOOL value) {
+    return This->lpVtbl->put_IsForced(This,value);
+}
+static FORCEINLINE HRESULT IUpdateInstaller_get_ParentHwnd(IUpdateInstaller* This,HWND *retval) {
+    return This->lpVtbl->get_ParentHwnd(This,retval);
+}
+static FORCEINLINE HRESULT IUpdateInstaller_put_ParentHwnd(IUpdateInstaller* This,HWND value) {
+    return This->lpVtbl->put_ParentHwnd(This,value);
+}
+static FORCEINLINE HRESULT IUpdateInstaller_put_ParentWindow(IUpdateInstaller* This,IUnknown *value) {
+    return This->lpVtbl->put_ParentWindow(This,value);
+}
+static FORCEINLINE HRESULT IUpdateInstaller_get_ParentWindow(IUpdateInstaller* This,IUnknown **retval) {
+    return This->lpVtbl->get_ParentWindow(This,retval);
+}
+static FORCEINLINE HRESULT IUpdateInstaller_get_Updates(IUpdateInstaller* This,IUpdateCollection **retval) {
+    return This->lpVtbl->get_Updates(This,retval);
+}
+static FORCEINLINE HRESULT IUpdateInstaller_put_Updates(IUpdateInstaller* This,IUpdateCollection *value) {
+    return This->lpVtbl->put_Updates(This,value);
+}
+static FORCEINLINE HRESULT IUpdateInstaller_BeginInstall(IUpdateInstaller* This,IUnknown *onProgressChanged,IUnknown *onCompleted,VARIANT state,IInstallationJob **retval) {
+    return This->lpVtbl->BeginInstall(This,onProgressChanged,onCompleted,state,retval);
+}
+static FORCEINLINE HRESULT IUpdateInstaller_BeginUninstall(IUpdateInstaller* This,IUnknown *onProgressChanged,IUnknown *onCompleted,VARIANT state,IInstallationJob **retval) {
+    return This->lpVtbl->BeginUninstall(This,onProgressChanged,onCompleted,state,retval);
+}
+static FORCEINLINE HRESULT IUpdateInstaller_EndInstall(IUpdateInstaller* This,IInstallationJob *value,IInstallationResult **retval) {
+    return This->lpVtbl->EndInstall(This,value,retval);
+}
+static FORCEINLINE HRESULT IUpdateInstaller_EndUninstall(IUpdateInstaller* This,IInstallationJob *value,IInstallationResult **retval) {
+    return This->lpVtbl->EndUninstall(This,value,retval);
+}
+static FORCEINLINE HRESULT IUpdateInstaller_Install(IUpdateInstaller* This,IInstallationResult **retval) {
+    return This->lpVtbl->Install(This,retval);
+}
+static FORCEINLINE HRESULT IUpdateInstaller_RunWizard(IUpdateInstaller* This,BSTR dialogTitle,IInstallationResult **retval) {
+    return This->lpVtbl->RunWizard(This,dialogTitle,retval);
+}
+static FORCEINLINE HRESULT IUpdateInstaller_get_IsBusy(IUpdateInstaller* This,VARIANT_BOOL *retval) {
+    return This->lpVtbl->get_IsBusy(This,retval);
+}
+static FORCEINLINE HRESULT IUpdateInstaller_Uninstall(IUpdateInstaller* This,IInstallationResult **retval) {
+    return This->lpVtbl->Uninstall(This,retval);
+}
+static FORCEINLINE HRESULT IUpdateInstaller_get_AllowSourcePrompts(IUpdateInstaller* This,VARIANT_BOOL *retval) {
+    return This->lpVtbl->get_AllowSourcePrompts(This,retval);
+}
+static FORCEINLINE HRESULT IUpdateInstaller_put_AllowSourcePrompts(IUpdateInstaller* This,VARIANT_BOOL value) {
+    return This->lpVtbl->put_AllowSourcePrompts(This,value);
+}
+static FORCEINLINE HRESULT IUpdateInstaller_get_RebootRequiredBeforeInstallation(IUpdateInstaller* This,VARIANT_BOOL *retval) {
+    return This->lpVtbl->get_RebootRequiredBeforeInstallation(This,retval);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IUpdateInstaller_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * ISystemInformation interface
+ */
+#ifndef __ISystemInformation_INTERFACE_DEFINED__
+#define __ISystemInformation_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_ISystemInformation, 0xade87bf7, 0x7b56, 0x4275, 0x8f,0xab, 0xb9,0xb0,0xe5,0x91,0x84,0x4b);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("ade87bf7-7b56-4275-8fab-b9b0e591844b")
+ISystemInformation : public IDispatch
+{
+    virtual HRESULT STDMETHODCALLTYPE get_OemHardwareSupportLink(
+        BSTR *retval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_RebootRequired(
+        VARIANT_BOOL *retval) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(ISystemInformation, 0xade87bf7, 0x7b56, 0x4275, 0x8f,0xab, 0xb9,0xb0,0xe5,0x91,0x84,0x4b)
+#endif
+#else
+typedef struct ISystemInformationVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        ISystemInformation *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        ISystemInformation *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        ISystemInformation *This);
+
+    /*** IDispatch methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
+        ISystemInformation *This,
+        UINT *pctinfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
+        ISystemInformation *This,
+        UINT iTInfo,
+        LCID lcid,
+        ITypeInfo **ppTInfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
+        ISystemInformation *This,
+        REFIID riid,
+        LPOLESTR *rgszNames,
+        UINT cNames,
+        LCID lcid,
+        DISPID *rgDispId);
+
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        ISystemInformation *This,
+        DISPID dispIdMember,
+        REFIID riid,
+        LCID lcid,
+        WORD wFlags,
+        DISPPARAMS *pDispParams,
+        VARIANT *pVarResult,
+        EXCEPINFO *pExcepInfo,
+        UINT *puArgErr);
+
+    /*** ISystemInformation methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_OemHardwareSupportLink)(
+        ISystemInformation *This,
+        BSTR *retval);
+
+    HRESULT (STDMETHODCALLTYPE *get_RebootRequired)(
+        ISystemInformation *This,
+        VARIANT_BOOL *retval);
+
+    END_INTERFACE
+} ISystemInformationVtbl;
+
+interface ISystemInformation {
+    CONST_VTBL ISystemInformationVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define ISystemInformation_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define ISystemInformation_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define ISystemInformation_Release(This) (This)->lpVtbl->Release(This)
+/*** IDispatch methods ***/
+#define ISystemInformation_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
+#define ISystemInformation_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+#define ISystemInformation_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+#define ISystemInformation_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+/*** ISystemInformation methods ***/
+#define ISystemInformation_get_OemHardwareSupportLink(This,retval) (This)->lpVtbl->get_OemHardwareSupportLink(This,retval)
+#define ISystemInformation_get_RebootRequired(This,retval) (This)->lpVtbl->get_RebootRequired(This,retval)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT ISystemInformation_QueryInterface(ISystemInformation* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG ISystemInformation_AddRef(ISystemInformation* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG ISystemInformation_Release(ISystemInformation* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDispatch methods ***/
+static FORCEINLINE HRESULT ISystemInformation_GetTypeInfoCount(ISystemInformation* This,UINT *pctinfo) {
+    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
+}
+static FORCEINLINE HRESULT ISystemInformation_GetTypeInfo(ISystemInformation* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
+    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
+}
+static FORCEINLINE HRESULT ISystemInformation_GetIDsOfNames(ISystemInformation* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
+    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
+}
+static FORCEINLINE HRESULT ISystemInformation_Invoke(ISystemInformation* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
+    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
+}
+/*** ISystemInformation methods ***/
+static FORCEINLINE HRESULT ISystemInformation_get_OemHardwareSupportLink(ISystemInformation* This,BSTR *retval) {
+    return This->lpVtbl->get_OemHardwareSupportLink(This,retval);
+}
+static FORCEINLINE HRESULT ISystemInformation_get_RebootRequired(ISystemInformation* This,VARIANT_BOOL *retval) {
+    return This->lpVtbl->get_RebootRequired(This,retval);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __ISystemInformation_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * AutomaticUpdates coclass
+ */
+
+DEFINE_GUID(CLSID_AutomaticUpdates, 0xbfe18e9c, 0x6d87, 0x4450, 0xb3,0x7c, 0xe0,0x2f,0x0b,0x37,0x38,0x03);
+
+#ifdef __cplusplus
+class DECLSPEC_UUID("bfe18e9c-6d87-4450-b37c-e02f0b373803") AutomaticUpdates;
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(AutomaticUpdates, 0xbfe18e9c, 0x6d87, 0x4450, 0xb3,0x7c, 0xe0,0x2f,0x0b,0x37,0x38,0x03)
+#endif
+#endif
+
+/*****************************************************************************
+ * UpdateInstaller coclass
+ */
+
+DEFINE_GUID(CLSID_UpdateInstaller, 0xd2e0fe7f, 0xd23e, 0x48e1, 0x93,0xc0, 0x6f,0xa8,0xcc,0x34,0x64,0x74);
+
+#ifdef __cplusplus
+class DECLSPEC_UUID("d2e0fe7f-d23e-48e1-93c0-6fa8cc346474") UpdateInstaller;
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(UpdateInstaller, 0xd2e0fe7f, 0xd23e, 0x48e1, 0x93,0xc0, 0x6f,0xa8,0xcc,0x34,0x64,0x74)
+#endif
+#endif
+
+/*****************************************************************************
+ * UpdateSession coclass
+ */
+
+DEFINE_GUID(CLSID_UpdateSession, 0x4cb43d7f, 0x7eee, 0x4906, 0x86,0x98, 0x60,0xda,0x1c,0x38,0xf2,0xfe);
+
+#ifdef __cplusplus
+class DECLSPEC_UUID("4cb43d7f-7eee-4906-8698-60da1c38f2fe") UpdateSession;
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(UpdateSession, 0x4cb43d7f, 0x7eee, 0x4906, 0x86,0x98, 0x60,0xda,0x1c,0x38,0xf2,0xfe)
+#endif
+#endif
+
+/*****************************************************************************
+ * SystemInformation coclass
+ */
+
+DEFINE_GUID(CLSID_SystemInformation, 0xc01b9ba0, 0xbea7, 0x41ba, 0xb6,0x04, 0xd0,0xa3,0x6f,0x46,0x91,0x33);
+
+#ifdef __cplusplus
+class DECLSPEC_UUID("c01b9ba0-bea7-41ba-b604-d0a36f469133") SystemInformation;
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(SystemInformation, 0xc01b9ba0, 0xbea7, 0x41ba, 0xb6,0x04, 0xd0,0xa3,0x6f,0x46,0x91,0x33)
+#endif
+#endif
+
+#endif /* __WUApiLib_LIBRARY_DEFINED__ */
+/* Begin additional prototypes for all interfaces */
+
+ULONG           __RPC_USER BSTR_UserSize     (ULONG *, ULONG, BSTR *);
+unsigned char * __RPC_USER BSTR_UserMarshal  (ULONG *, unsigned char *, BSTR *);
+unsigned char * __RPC_USER BSTR_UserUnmarshal(ULONG *, unsigned char *, BSTR *);
+void            __RPC_USER BSTR_UserFree     (ULONG *, BSTR *);
+ULONG           __RPC_USER HWND_UserSize     (ULONG *, ULONG, HWND *);
+unsigned char * __RPC_USER HWND_UserMarshal  (ULONG *, unsigned char *, HWND *);
+unsigned char * __RPC_USER HWND_UserUnmarshal(ULONG *, unsigned char *, HWND *);
+void            __RPC_USER HWND_UserFree     (ULONG *, HWND *);
+ULONG           __RPC_USER VARIANT_UserSize     (ULONG *, ULONG, VARIANT *);
+unsigned char * __RPC_USER VARIANT_UserMarshal  (ULONG *, unsigned char *, VARIANT *);
+unsigned char * __RPC_USER VARIANT_UserUnmarshal(ULONG *, unsigned char *, VARIANT *);
+void            __RPC_USER VARIANT_UserFree     (ULONG *, VARIANT *);
+
+/* End additional prototypes */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __wuapi_h__ */
diff --git a/mingw-w64-headers/include/wuapi.idl b/mingw-w64-headers/include/wuapi.idl
new file mode 100644
index 0000000..a0a8e43
--- /dev/null
+++ b/mingw-w64-headers/include/wuapi.idl
@@ -0,0 +1,1359 @@
+/*
+ * Copyright 2008 Hans Leidekker for CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+import "oaidl.idl";
+
+#ifndef __WIDL__
+#define threading(model)
+#define progid(str)
+#define vi_progid(str)
+#endif
+
+[
+    helpstring("WUAPI 2.0 Type Library"),
+    uuid(b596cc9f-56e5-419e-a622-e01bb457431e),
+    version(2.0)
+]
+library WUApiLib {
+
+importlib("stdole2.tlb");
+
+interface ICategoryCollection;
+interface IStringCollection;
+interface IUpdateCollection;
+interface IUpdateDownloader;
+interface IUpdateInstaller;
+interface IUpdateSearcher;
+
+typedef [public] enum tagDownloadPriority
+{
+    dpLow    = 1,
+    dpNormal = 2,
+    dpHigh   = 3,
+} DownloadPriority;
+
+typedef [public] enum tagServerSelection
+{
+    ssDefault       = 0,
+    ssManagedServer = 1,
+    ssWindowsUpdate = 2,
+    ssOthers        = 3,
+} ServerSelection;
+
+typedef [public] enum tagAutomaticUpdatesNotificationLevel
+{
+    aunlNotConfigured,
+    aunlDisabled,
+    aunlNotifyBeforeDownload,
+    aunlNotifyBeforeInstallation,
+    aunlScheduledInstallation,
+} AutomaticUpdatesNotificationLevel;
+
+typedef [public] enum tagAutomaticUpdatesScheduledInstallationDay
+{
+    ausidEveryDay,
+    ausidEverySunday,
+    ausidEveryMonday,
+    ausidEveryTuesday,
+    ausidEveryWednesday,
+    ausidEveryThursday,
+    ausidEveryFriday,
+    ausidEverySaturday,
+} AutomaticUpdatesScheduledInstallationDay;
+
+typedef [public] enum tagDownloadPhase
+{
+    dphInitializing,
+    dphDownloading,
+    dphVerifying,
+} DownloadPhase;
+
+typedef [public] enum tagOperationResultCode
+{
+    orcNotStarted,
+    orcInProgress,
+    orcSucceeded,
+    orcSucceededWithErrors,
+    orcFailed,
+    orcAborted,
+} OperationResultCode;
+
+typedef [public] enum tagUpdateExceptionContext
+{
+    uecGeneral = 1,
+    uecWindowsDriver,
+    uecWindowsInstaller
+} UpdateExceptionContext;
+
+typedef [public] enum tagInstallationImpact
+{
+    iiNormal,
+    iiMinor,
+    iiRequiresExclusiveHandling
+} InstallationImpact;
+
+typedef [public] enum tagInstallationRebootBehavior
+{
+    irbNeverReboots,
+    irbAlwaysRequiresReboot,
+    irbCanRequestReboot
+} InstallationRebootBehavior;
+
+typedef [public] enum tagUpdateType
+{
+    utSoftware = 1,
+    utDriver
+} UpdateType;
+
+typedef [public] enum tagUpdateOperation
+{
+    uoInstallation = 1,
+    uoUninstallation
+} UpdateOperation;
+
+typedef [public] enum tagDeploymentAction
+{
+    daNone,
+    daInstallation,
+    daUninstallation,
+    daDetection
+} DeploymentAction;
+
+[
+    object,
+    oleautomation,
+    dual,
+    nonextensible,
+    uuid(2ee48f22-af3c-405f-8970-f71be12ee9a2),
+    pointer_default(unique)
+]
+interface IAutomaticUpdatesSettings : IDispatch
+{
+    [propget, id(0x60020001)]
+    HRESULT NotificationLevel( [out, retval] AutomaticUpdatesNotificationLevel *retval );
+
+    [propput, id(0x60020001)]
+    HRESULT NotificationLevel( [in] AutomaticUpdatesNotificationLevel value );
+
+    [propget, id(0x60020002)]
+    HRESULT ReadOnly( [out, retval] VARIANT_BOOL *retval );
+
+    [propget, id(0x60020003)]
+    HRESULT Required( [out, retval] VARIANT_BOOL *retval );
+
+    [propget, id(0x60020004)]
+    HRESULT ScheduledInstallationDay( [out, retval] AutomaticUpdatesScheduledInstallationDay *retval );
+
+    [propput, id(0x60020004)]
+    HRESULT ScheduledInstallationDay( [in] AutomaticUpdatesScheduledInstallationDay value );
+
+    [propget, id(0x60020005)]
+    HRESULT ScheduledInstallationTime( [out, retval] LONG *retval );
+
+    [propput, id(0x60020005)]
+    HRESULT ScheduledInstallationTime( [in] LONG value );
+
+    [id(0x60020006)]
+    HRESULT Refresh();
+
+    [id(0x60020007)]
+    HRESULT Save();
+}
+
+[
+    object,
+    uuid(673425bf-c082-4c7c-bdfd-569464b8e0ce),
+    oleautomation,
+    dual,
+    nonextensible,
+    pointer_default(unique),
+    hidden
+]
+interface IAutomaticUpdates : IDispatch
+{
+    HRESULT DetectNow();
+    HRESULT Pause();
+    HRESULT Resume();
+    HRESULT ShowSettingsDialog();
+
+    [propget]
+    HRESULT Settings(
+        [out, retval] IAutomaticUpdatesSettings **retval);
+
+    [propget]
+    HRESULT ServiceEnabled(
+        [out, retval] VARIANT_BOOL *retval);
+
+    HRESULT EnableService();
+}
+
+[
+    object,
+    oleautomation,
+    dual,
+    nonextensible,
+    uuid(174c81fe-aecd-4dae-b8a0-2c6318dd86a8),
+    pointer_default(unique),
+]
+interface IWebProxy : IDispatch
+{
+    [propget, id(0x60020001)]
+    HRESULT Address( [out, retval] BSTR *retval );
+
+    [propput, id(0x60020001)]
+    HRESULT Address( [in] BSTR value );
+
+    [propget, id(0x60020002)]
+    HRESULT BypassList( [out, retval] IStringCollection **retval );
+
+    [propput, id(0x60020002)]
+    HRESULT BypassList( [in] IStringCollection *value );
+
+    [propget, id(0x60020003)]
+    HRESULT BypassProxyOnLocal( [out, retval] VARIANT_BOOL *retval );
+
+    [propput, id(0x60020003)]
+    HRESULT BypassProxyOnLocal( [in] VARIANT_BOOL value );
+
+    [propget, id(0x60020004)]
+    HRESULT ReadOnly( [out, retval] VARIANT_BOOL *retval );
+
+    [propget, id(0x60020005)]
+    HRESULT UserName( [out, retval] BSTR *retval );
+
+    [propput, id(0x60020005)]
+    HRESULT UserName( [in] BSTR value );
+
+    [id(0x60020006)]
+    HRESULT SetPassword( [in] BSTR value );
+
+    [id(0x60020007)]
+    HRESULT PromptForCredentials( [in, unique] IUnknown *parentWindow,
+                                  [in] BSTR title );
+
+    [restricted, id(0x60020008)]
+    HRESULT PromptForCredentialsFromHwnd( [in, unique] HWND parentWindow,
+                                          [in] BSTR title );
+
+    [propget, id(0x60020009)]
+    HRESULT AutoDetect( [out, retval] VARIANT_BOOL *retval );
+
+    [propput, id(0x60020009)]
+    HRESULT AutoDetect( [in] VARIANT_BOOL value );
+}
+
+[
+    object,
+    uuid(816858a4-260d-4260-933a-2585f1abc76b),
+    oleautomation,
+    dual,
+    nonextensible,
+    pointer_default(unique),
+]
+interface IUpdateSession : IDispatch
+{
+    [propget]
+    HRESULT ClientApplicationID(
+        [out, retval] BSTR *retval);
+
+    [propput]
+    HRESULT ClientApplicationID(
+        [in] BSTR value);
+
+    [propget]
+    HRESULT ReadOnly(
+        [out, retval] VARIANT_BOOL *retval);
+
+    [propget]
+    HRESULT WebProxy(
+        [out, retval] IWebProxy **retval);
+
+    [propput]
+    HRESULT WebProxy(
+        [in, unique] IWebProxy *value);
+
+    HRESULT CreateUpdateSearcher(
+        [out, retval] IUpdateSearcher **retval);
+
+    HRESULT CreateUpdateDownloader(
+        [out, retval] IUpdateDownloader **retval);
+
+    HRESULT CreateUpdateInstaller(
+        [out, retval] IUpdateInstaller **retval);
+}
+
+[
+    object,
+    oleautomation,
+    dual,
+    nonextensible,
+    uuid(7c907864-346c-4aeb-8f3f-57da289f969f),
+    pointer_default(unique),
+]
+interface IImageInformation : IDispatch
+{
+    [propget, id(0x60020001)]
+    HRESULT AltText( [out, retval] BSTR *retval );
+
+    [propget, id(0x60020002)]
+    HRESULT Height( [out, retval] LONG *retval );
+
+    [propget, id(0x60020003)]
+    HRESULT Source( [out, retval] BSTR *retval );
+
+    [propget, id(0x60020004)]
+    HRESULT Width( [out, retval] LONG *retval );
+}
+
+[
+    object,
+    oleautomation,
+    dual,
+    nonextensible,
+    uuid(81ddc1b8-9d35-47a6-b471-5b80f519223b),
+    pointer_default(unique),
+]
+interface ICategory : IDispatch
+{
+    [propget, id(DISPID_VALUE)]
+    HRESULT Name( [out, retval] BSTR *retval );
+
+    [propget, id(0x60020001)]
+    HRESULT CategoryID( [out, retval] BSTR *retval );
+
+    [propget, id(0x60020002)]
+    HRESULT Children( [out, retval] ICategoryCollection **retval );
+
+    [propget, id(0x60020003)]
+    HRESULT Description( [out, retval] BSTR *retval );
+
+    [propget, id(0x60020004)]
+    HRESULT Image( [out, retval] IImageInformation **retval );
+
+    [propget, id(0x60020005)]
+    HRESULT Order( [out, retval] LONG *retval );
+
+    [propget, id(0x60020006)]
+    HRESULT Parent( [out, retval] ICategory **retval );
+
+    [propget, id(0x60020007)]
+    HRESULT Type( [out, retval] BSTR *retval );
+
+    [propget, id(0x60020008)]
+    HRESULT Updates( [out, retval] IUpdateCollection **retval );
+}
+
+[
+    object,
+    oleautomation,
+    dual,
+    nonextensible,
+    uuid(3a56bfb8-576c-43f7-9335-fe4838fd7e37),
+    pointer_default(unique),
+]
+interface ICategoryCollection : IDispatch
+{
+    [propget, id(DISPID_VALUE)]
+    HRESULT Item( [in] LONG index,
+                [out, retval] ICategory **retval );
+
+    [propget, id(DISPID_NEWENUM)]
+    HRESULT _NewEnum( [out, retval] IUnknown **retval );
+
+    [propget, id(0x60020001)]
+    HRESULT Count( [out, retval] LONG *retval );
+}
+
+[
+    object,
+    oleautomation,
+    dual,
+    nonextensible,
+    uuid(eff90582-2ddc-480f-a06d-60f3fbc362c3),
+    pointer_default(unique),
+    hidden
+]
+interface IStringCollection : IDispatch
+{
+    [propget, id(DISPID_VALUE)]
+    HRESULT Item( [in] LONG index,
+                  [out, retval] BSTR *retval );
+
+    [propput, id(DISPID_VALUE)]
+    HRESULT Item( [in] LONG index,
+                [in] BSTR value );
+
+    [propget, id(DISPID_NEWENUM)]
+    HRESULT _NewEnum( [out, retval] IUnknown **retval );
+
+    [propget, id(0x60020001)]
+    HRESULT Count( [out, retval] LONG *retval );
+
+    [propget, id(0x60020002)]
+    HRESULT ReadOnly( [out, retval] VARIANT_BOOL *retval );
+
+    [id(0x60020003)]
+    HRESULT Add( [in] BSTR value,
+                 [out, retval] LONG *retval );
+
+    [id(0x60020004)]
+    HRESULT Clear();
+
+    [id(0x60020005)]
+    HRESULT Copy( [out, retval] IStringCollection **retval );
+
+    [id(0x60020006)]
+    HRESULT Insert( [in] LONG index,
+                    [in] BSTR value );
+
+    [id(0x60020007)]
+    HRESULT RemoveAt( [in] LONG index );
+}
+
+[
+    object,
+    oleautomation,
+    dual,
+    nonextensible,
+    uuid(a376dd5e-09d4-427f-af7c-fed5b6e1c1d6),
+    pointer_default(unique),
+]
+interface IUpdateException : IDispatch
+{
+    [propget, id(DISPID_VALUE)]
+    HRESULT Message( [out, retval] BSTR *retval );
+
+    [propget, id(0x60020001)]
+    HRESULT HResult( [out, retval] LONG *retval );
+
+    [propget, id(0x60020002)]
+    HRESULT Context( [out, retval] UpdateExceptionContext *retval );
+}
+
+[
+    object,
+    oleautomation,
+    dual,
+    nonextensible,
+    uuid(503626a3-8e14-4729-9355-0fe664bd2321),
+    pointer_default(unique),
+]
+interface IUpdateExceptionCollection : IDispatch
+{
+    [propget, id(DISPID_VALUE)]
+    HRESULT Item( [in] LONG index,
+                  [out, retval] IUpdateException **retval );
+
+    [propget, id(DISPID_NEWENUM)]
+    HRESULT _NewEnum( [out, retval] IUnknown **retval );
+
+    [propget, id(0x60020001)]
+    HRESULT Count( [out, retval] LONG *retval );
+}
+
+[
+    object,
+    oleautomation,
+    dual,
+    nonextensible,
+    uuid(46297823-9940-4c09-aed9-cd3ea6d05968),
+    pointer_default(unique)
+]
+interface IUpdateIdentity : IDispatch
+{
+    [propget, id(0x60020002)]
+    HRESULT RevisionNumber( [out, retval] LONG *retval );
+
+    [propget, id(0x60020003)]
+    HRESULT UpdateID( [out, retval] BSTR *retval );
+}
+
+[
+    ,
+    object,
+    oleautomation,
+    dual,
+    nonextensible,
+    uuid(d9a59339-e245-4dbd-9686-4d5763e39624),
+    pointer_default(unique),
+]
+interface IInstallationBehavior : IDispatch
+{
+    [propget, id(0x60020001)]
+    HRESULT CanRequestUserInput( [out, retval] VARIANT_BOOL *retval );
+
+    [propget, id(0x60020002)]
+    HRESULT Impact( [out, retval] InstallationImpact *retval );
+
+    [propget, id(0x60020003)]
+    HRESULT RebootBehavior( [out, retval] InstallationRebootBehavior *retval );
+
+    [propget, id(0x60020004)]
+    HRESULT RequiresNetworkConnectivity( [out, retval] VARIANT_BOOL *retval );
+}
+
+[
+    object,
+    oleautomation,
+    dual,
+    nonextensible,
+    uuid(54a2cb2d-9a0c-48b6-8a50-9abb69ee2d02),
+    pointer_default(unique),
+]
+interface IUpdateDownloadContent : IDispatch
+{
+    [propget, id(0x60020001)]
+    HRESULT DownloadUrl( [out, retval] BSTR *retval );
+}
+
+[
+    object,
+    oleautomation,
+    dual,
+    nonextensible,
+    uuid(bc5513c8-b3b8-4bf7-a4d4-361c0d8c88ba),
+    pointer_default(unique),
+]
+interface IUpdateDownloadContentCollection : IDispatch
+{
+    [propget, id(DISPID_VALUE)]
+    HRESULT Item( [in] LONG index,
+                  [out, retval] IUpdateDownloadContent **retval );
+
+    [propget, id(DISPID_NEWENUM)]
+    HRESULT _NewEnum( [out, retval] IUnknown **retval );
+
+    [propget, id(0x60020001)]
+    HRESULT Count( [out, retval] LONG *retval );
+}
+
+[
+
+    object,
+    oleautomation,
+    dual,
+    nonextensible,
+    uuid(6a92b07a-d821-4682-b423-5c805022cc4d),
+    pointer_default(unique),
+]
+interface IUpdate : IDispatch
+{
+    [propget, id(DISPID_VALUE)]
+    HRESULT Title( [out, retval] BSTR *retval );
+
+    [propget, id(0x60020001)]
+    HRESULT AutoSelectOnWebSites( [out, retval] VARIANT_BOOL *retval );
+
+    [propget, id(0x60020002)]
+    HRESULT BundledUpdates( [out, retval] IUpdateCollection **retval );
+
+    [propget, id(0x60020003)]
+    HRESULT CanRequireSource( [out, retval] VARIANT_BOOL *retval );
+
+    [propget, id(0x60020004)]
+    HRESULT Categories( [out, retval] ICategoryCollection **retval );
+
+    [propget, id(0x60020005)]
+    HRESULT Deadline( [out, retval] VARIANT *retval );
+
+    [propget, id(0x60020006)]
+    HRESULT DeltaCompressedContentAvailable( [out, retval] VARIANT_BOOL *retval );
+
+    [propget, id(0x60020007)]
+    HRESULT DeltaCompressedContentPreferred( [out, retval] VARIANT_BOOL *retval );
+
+    [propget, id(0x60020008)]
+    HRESULT Description( [out, retval] BSTR *retval );
+
+    [propget, id(0x60020009)]
+    HRESULT EulaAccepted( [out, retval] VARIANT_BOOL *retval );
+
+    [propget, id(0x6002000a)]
+    HRESULT EulaText( [out, retval] BSTR *retval );
+
+    [propget, id(0x6002000b)]
+    HRESULT HandlerID( [out, retval] BSTR *retval );
+
+    [propget, id(0x6002000c)]
+    HRESULT Identity( [out, retval] IUpdateIdentity **retval );
+
+    [propget, id(0x6002000d)]
+    HRESULT Image( [out, retval] IImageInformation **retval );
+
+    [propget, id(0x6002000e)]
+    HRESULT InstallationBehavior( [out, retval] IInstallationBehavior **retval );
+
+    [propget, id(0x6002000f)]
+    HRESULT IsBeta( [out, retval] VARIANT_BOOL *retval );
+
+    [propget, id(0x60020010)]
+    HRESULT IsDownloaded( [out, retval] VARIANT_BOOL *retval );
+
+    [propget, id(0x60020011)]
+    HRESULT IsHidden( [out, retval] VARIANT_BOOL *retval );
+
+    [propput, id(0x60020011)]
+    HRESULT IsHidden( [in] VARIANT_BOOL value );
+
+    [propget, id(0x60020012)]
+    HRESULT IsInstalled( [out, retval] VARIANT_BOOL *retval );
+
+    [propget, id(0x60020013)]
+    HRESULT IsMandatory( [out, retval] VARIANT_BOOL *retval );
+
+    [propget, id(0x60020014)]
+    HRESULT IsUninstallable( [out, retval] VARIANT_BOOL *retval );
+
+    [propget, id(0x60020015)]
+    HRESULT Languages( [out, retval] IStringCollection **retval );
+
+    [propget, id(0x60020016)]
+    HRESULT LastDeploymentChangeTime( [out, retval] DATE *retval );
+
+    [propget, id(0x60020017)]
+    HRESULT MaxDownloadSize( [out, retval] DECIMAL *retval );
+
+    [propget, id(0x60020018)]
+    HRESULT MinDownloadSize( [out, retval] DECIMAL *retval );
+
+    [propget, id(0x60020019)]
+    HRESULT MoreInfoUrls( [out, retval] IStringCollection **retval );
+
+    [propget, id(0x6002001a)]
+    HRESULT MsrcSeverity( [out, retval] BSTR *retval );
+
+    [propget, id(0x6002001b)]
+    HRESULT RecommendedCpuSpeed( [out, retval] LONG *retval );
+
+    [propget, id(0x6002001c)]
+    HRESULT RecommendedHardDiskSpace( [out, retval] LONG *retval );
+
+    [propget, id(0x6002001d)]
+    HRESULT RecommendedMemory( [out, retval] LONG *retval );
+
+    [propget, id(0x6002001e)]
+    HRESULT ReleaseNotes( [out, retval] BSTR *retval );
+
+    [propget, id(0x6002001f)]
+    HRESULT SecurityBulletinIDs( [out, retval] IStringCollection **retval );
+
+    [propget, id(0x60020021)]
+    HRESULT SupersededUpdateIDs( [out, retval] IStringCollection **retval );
+
+    [propget, id(0x60020022)]
+    HRESULT SupportUrl( [out, retval] BSTR *retval );
+
+    [propget, id(0x60020023)]
+    HRESULT Type( [out, retval] UpdateType *retval );
+
+    [propget, id(0x60020024)]
+    HRESULT UninstallationNotes( [out, retval] BSTR *retval );
+
+    [propget, id(0x60020025)]
+    HRESULT UninstallationBehavior( [out, retval] IInstallationBehavior **retval );
+
+    [propget, id(0x60020026)]
+    HRESULT UninstallationSteps( [out, retval] IStringCollection **retval );
+
+    [propget, id(0x60020028)]
+    HRESULT KBArticleIDs( [out, retval] IStringCollection **retval );
+
+    [id(0x60020027)]
+    HRESULT AcceptEula();
+
+    [propget, id(0x60020029)]
+    HRESULT DeploymentAction( [out, retval] DeploymentAction *retval );
+
+    [id(0x6002002a)]
+    HRESULT CopyFromCache( [in, ref] BSTR path,
+                           [in] VARIANT_BOOL toExtractCabFiles );
+
+    [propget, id(0x6002002b)]
+    HRESULT DownloadPriority( [out, retval] DownloadPriority *retval );
+
+    [propget, id(0x6002002c)]
+    HRESULT DownloadContents( [out, retval] IUpdateDownloadContentCollection **retval );
+}
+
+[
+
+    object,
+    oleautomation,
+    dual,
+    nonextensible,
+    uuid(07f7438c-7709-4ca5-b518-91279288134e),
+    pointer_default(unique),
+    hidden
+]
+interface IUpdateCollection : IDispatch
+{
+    [propget, id(DISPID_VALUE)]
+    HRESULT Item( [in] LONG index,
+                  [out, retval] IUpdate **retval );
+
+    [propput, id(DISPID_VALUE)]
+    HRESULT Item( [in] LONG index,
+                  [in] IUpdate *value );
+
+    [propget, id(DISPID_NEWENUM)]
+    HRESULT _NewEnum( [out, retval] IUnknown **retval );
+
+    [propget, id(0x60020001)]
+    HRESULT Count( [out, retval] LONG *retval );
+
+    [propget, id(0x60020002)]
+    HRESULT ReadOnly( [out, retval] VARIANT_BOOL *retval );
+
+    [id(0x60020003)]
+    HRESULT Add( [in] IUpdate *value,
+                 [out, retval] LONG *retval );
+
+    [id(0x60020004)]
+    HRESULT Clear();
+
+    [id(0x60020005)]
+    HRESULT Copy( [out, retval] IUpdateCollection **retval );
+
+    [id(0x60020006)]
+    HRESULT Insert( [in] LONG index,
+                [in] IUpdate *value );
+
+    [id(0x60020007)]
+    HRESULT RemoveAt( [in] LONG index );
+}
+
+[
+    object,
+    oleautomation,
+    dual,
+    nonextensible,
+    uuid(7366ea16-7a1a-4ea2-b042-973d3e9cd99b),
+    pointer_default(unique),
+]
+interface ISearchJob : IDispatch
+{
+    [propget, id(0x60020001)]
+    HRESULT AsyncState( [out, retval] VARIANT *retval );
+
+    [propget, id(0x60020002)]
+    HRESULT IsCompleted( [out, retval] VARIANT_BOOL *retval );
+
+    [id(0x60020003)]
+    HRESULT CleanUp();
+
+    [id(0x60020004)]
+    HRESULT RequestAbort();
+}
+
+[
+    object,
+    oleautomation,
+    dual,
+    nonextensible,
+    uuid(d40cff62-e08c-4498-941a-01e25f0fd33c),
+    pointer_default(unique),
+]
+interface ISearchResult : IDispatch
+{
+    [propget, id(0x60020001)]
+    HRESULT ResultCode( [out, retval] OperationResultCode *retval );
+
+    [propget, id(0x60020002)]
+    HRESULT RootCategories( [out, retval] ICategoryCollection **retval );
+
+    [propget, id(0x60020003)]
+    HRESULT Updates( [out, retval] IUpdateCollection **retval );
+
+    [propget, id(0x60020004)]
+    HRESULT Warnings( [out, retval] IUpdateExceptionCollection **retval );
+}
+
+[
+    object,
+    oleautomation,
+    dual,
+    nonextensible,
+    uuid(be56a644-af0e-4e0e-a311-c1d8e695cbff),
+    pointer_default(unique),
+]
+interface IUpdateHistoryEntry : IDispatch
+{
+    [propget, id(0x60020001)]
+    HRESULT Operation( [out, retval] UpdateOperation *retval );
+
+    [propget, id(0x60020002)]
+    HRESULT ResultCode( [out, retval] OperationResultCode *retval );
+
+    [propget, id(0x60020003)]
+    HRESULT HResult( [out, retval] LONG *retval );
+
+    [propget, id(0x60020004)]
+    HRESULT Date( [out, retval] DATE *retval );
+
+    [propget, id(0x60020005)]
+    HRESULT UpdateIdentity( [out, retval] IUpdateIdentity **retval );
+
+    [propget, id(0x60020006)]
+    HRESULT Title( [out, retval] BSTR *retval );
+
+    [propget, id(0x60020007)]
+    HRESULT Description( [out, retval] BSTR *retval );
+
+    [propget, id(0x60020008)]
+    HRESULT UnmappedResultCode( [out, retval] LONG *retval );
+
+    [propget, id(0x60020009)]
+    HRESULT ClientApplicationID( [out, retval] BSTR *retval );
+
+    [propget, id(0x6002000a)]
+    HRESULT ServerSelection( [out, retval] ServerSelection *retval );
+
+    [propget, id(0x6002000b)]
+    HRESULT ServiceID( [out, retval] BSTR *retval );
+
+    [propget, id(0x6002000c)]
+    HRESULT UninstallationSteps( [out, retval] IStringCollection **retval );
+
+    [propget, id(0x6002000d)]
+    HRESULT UninstallationNotes( [out, retval] BSTR *retval );
+
+    [propget, id(0x6002000e)]
+    HRESULT SupportUrl( [out, retval] BSTR *retval );
+}
+
+[
+    object,
+    oleautomation,
+    dual,
+    nonextensible,
+    uuid(a7f04f3c-a290-435b-aadf-a116c3357a5c),
+    pointer_default(unique),
+]
+interface IUpdateHistoryEntryCollection : IDispatch
+{
+    [propget, id(DISPID_VALUE)]
+    HRESULT Item( [in] LONG index,
+                  [out, retval] IUpdateHistoryEntry **retval );
+
+    [propget, id(DISPID_NEWENUM)]
+    HRESULT _NewEnum( [out, retval] IUnknown **retval );
+
+    [propget, id(0x60020001)]
+    HRESULT Count( [out, retval] LONG *retval );
+}
+
+[
+    object,
+    uuid(8f45abf1-f9ae-4b95-a933-f0f66e5056ea),
+    oleautomation,
+    dual,
+    nonextensible,
+    pointer_default(unique),
+]
+interface IUpdateSearcher : IDispatch
+{
+    [propget]
+    HRESULT CanAutomaticallyUpgradeService(
+        [out, retval] VARIANT_BOOL *retval);
+
+    [propput]
+    HRESULT CanAutomaticallyUpgradeService(
+        [in] VARIANT_BOOL value);
+
+    [propget]
+    HRESULT ClientApplicationID(
+        [out, retval] BSTR *retval);
+
+    [propput]
+    HRESULT ClientApplicationID(
+        [in] BSTR value);
+
+    [propget]
+    HRESULT IncludePotentiallySupersededUpdates(
+        [out, retval] VARIANT_BOOL *retval);
+
+    [propput]
+    HRESULT IncludePotentiallySupersededUpdates(
+        [in] VARIANT_BOOL value);
+
+    [propget]
+    HRESULT ServerSelection(
+        [out, retval] ServerSelection *retval);
+
+    [propput]
+    HRESULT ServerSelection(
+        [in] ServerSelection value);
+
+    HRESULT BeginSearch(
+        [in] BSTR criteria,
+        [in] IUnknown *onCompleted,
+        [in] VARIANT state,
+        [out, retval] ISearchJob **retval);
+
+    HRESULT EndSearch(
+        [in] ISearchJob *searchJob,
+        [out, retval] ISearchResult **retval);
+
+    HRESULT EscapeString(
+        [in] BSTR unescaped,
+        [out, retval] BSTR *retval);
+
+    HRESULT QueryHistory(
+        [in] LONG startIndex,
+        [in] LONG count,
+        [out, retval] IUpdateHistoryEntryCollection **retval);
+
+    HRESULT Search(
+        [in] BSTR criteria,
+        [out, retval] ISearchResult **retval);
+
+    [propget]
+    HRESULT Online(
+        [out, retval] VARIANT_BOOL *retval);
+
+    [propput]
+    HRESULT Online(
+        [in] VARIANT_BOOL value);
+
+    HRESULT GetTotalHistoryCount(
+        [out, retval] LONG *retval);
+
+    [propget]
+    HRESULT ServiceID(
+        [out, retval] BSTR *retval);
+
+    [propput]
+    HRESULT ServiceID(
+        [in] BSTR value);
+}
+
+[
+    object,
+    oleautomation,
+    dual,
+    nonextensible,
+    uuid(bf99af76-b575-42ad-8aa4-33cbb5477af1),
+    pointer_default(unique),
+]
+interface IUpdateDownloadResult : IDispatch
+{
+    [propget, id(0x60020001)]
+    HRESULT HResult( [out, retval] LONG *retval );
+
+    [propget, id(0x60020002)]
+    HRESULT ResultCode( [out, retval] OperationResultCode *retval );
+}
+
+[
+    object,
+    oleautomation,
+    dual,
+    nonextensible,
+    uuid(d31a5bac-f719-4178-9dbb-5e2cb47fd18a),
+    pointer_default(unique),
+]
+interface IDownloadProgress : IDispatch
+{
+    [propget, id(0x60020001)]
+    HRESULT CurrentUpdateBytesDownloaded( [out, retval] DECIMAL *retval );
+
+    [propget, id(0x60020002)]
+    HRESULT CurrentUpdateBytesToDownload( [out, retval] DECIMAL *retval );
+
+    [propget, id(0x60020003)]
+    HRESULT CurrentUpdateIndex( [out, retval] LONG *retval );
+
+    [propget, id(0x60020004)]
+    HRESULT PercentComplete( [out, retval] LONG *retval );
+
+    [propget, id(0x60020005)]
+    HRESULT TotalBytesDownloaded( [out, retval] DECIMAL *retval );
+
+    [propget, id(0x60020006)]
+    HRESULT TotalBytesToDownload( [out, retval] DECIMAL *retval );
+
+    [id(0x60020007)]
+    HRESULT GetUpdateResult( [in] LONG updateIndex,
+                             [out, retval] IUpdateDownloadResult **retval );
+
+
+    [propget, id(0x60020008)]
+    HRESULT CurrentUpdateDownloadPhase( [out, retval] DownloadPhase *retval );
+
+    [propget, id(0x60020009)]
+    HRESULT CurrentUpdatePercentComplete( [out, retval] LONG *retval );
+}
+
+[
+    object,
+    oleautomation,
+    dual,
+    nonextensible,
+    uuid(c574de85-7358-43f6-aae8-8697e62d8ba7),
+    pointer_default(unique),
+]
+interface IDownloadJob : IDispatch
+{
+    [propget, id(0x60020001)]
+    HRESULT AsyncState( [out, retval] VARIANT *retval );
+
+    [propget, id(0x60020002)]
+    HRESULT IsCompleted( [out, retval] VARIANT_BOOL *retval );
+
+    [propget, id(0x60020003)]
+    HRESULT Updates( [out, retval] IUpdateCollection **retval );
+
+    [id(0x60020004)]
+    HRESULT CleanUp();
+
+    [id(0x60020005)]
+    HRESULT GetProgress( [out, retval] IDownloadProgress **retval );
+
+    [id(0x60020006)]
+    HRESULT RequestAbort();
+}
+
+[
+    object,
+    oleautomation,
+    dual,
+    nonextensible,
+    uuid(daa4fdd0-4727-4dbe-a1e7-745dca317144),
+    pointer_default(unique),
+]
+interface IDownloadResult : IDispatch
+{
+    [propget, id(0x60020001)]
+    HRESULT HResult( [out, retval] LONG *retval );
+
+    [propget, id(0x60020002)]
+    HRESULT ResultCode( [out, retval] OperationResultCode *retval );
+
+    [id(0x60020003)]
+    HRESULT GetUpdateResult( [in] LONG updateIndex,
+                             [out, retval] IUpdateDownloadResult **retval );
+}
+
+[
+    object,
+    uuid(68f1c6f9-7ecc-4666-a464-247fe12496c3),
+    oleautomation,
+    dual,
+    nonextensible,
+    pointer_default(unique),
+    hidden
+]
+interface IUpdateDownloader : IDispatch
+{
+    [propget]
+    HRESULT ClientApplicationID(
+        [out, retval] BSTR *retval);
+
+    [propput]
+    HRESULT ClientApplicationID(
+        [in] BSTR value);
+
+    [propget]
+    HRESULT IsForced(
+        [out, retval] VARIANT_BOOL *retval);
+
+    [propput]
+    HRESULT IsForced(
+        [in] VARIANT_BOOL value);
+
+    [propget]
+    HRESULT Priority(
+        [out, retval] DownloadPriority *retval);
+
+    [propput]
+    HRESULT Priority(
+        [in] DownloadPriority value);
+
+    [propget]
+    HRESULT Updates(
+        [out, retval] IUpdateCollection **retval);
+
+    [propput]
+    HRESULT Updates(
+        [in] IUpdateCollection *value);
+
+    HRESULT BeginDownload(
+        [in] IUnknown *onProgressChanged,
+        [in] IUnknown *onCompleted,
+        [in] VARIANT state,
+        [out, retval] IDownloadJob **retval);
+
+    HRESULT Download(
+        [out, retval] IDownloadResult **retval);
+
+    HRESULT EndDownload(
+        [in] IDownloadJob *value,
+        [out, retval] IDownloadResult **retval);
+}
+
+[
+    object,
+    oleautomation,
+    dual,
+    nonextensible,
+    uuid(d940f0f8-3cbb-4fd0-993f-471e7f2328ad),
+    pointer_default(unique),
+]
+interface IUpdateInstallationResult : IDispatch
+{
+    [propget, id(0x60020001)]
+    HRESULT HResult( [out, retval] LONG *retval );
+
+    [propget, id(0x60020002)]
+    HRESULT RebootRequired( [out, retval] VARIANT_BOOL *retval );
+
+    [propget, id(0x60020003)]
+    HRESULT ResultCode( [out, retval] OperationResultCode *retval );
+}
+
+[
+    object,
+    oleautomation,
+    dual,
+    nonextensible,
+    uuid(345c8244-43a3-4e32-a368-65f073b76f36),
+    pointer_default(unique),
+]
+interface IInstallationProgress : IDispatch
+{
+    [propget, id(0x60020001)]
+    HRESULT CurrentUpdateIndex( [out, retval] LONG *retval );
+
+    [propget, id(0x60020002)]
+    HRESULT CurrentUpdatePercentComplete( [out, retval] LONG *retval );
+
+    [propget, id(0x60020003)]
+    HRESULT PercentComplete( [out, retval] LONG *retval );
+
+    [id(0x60020004)]
+    HRESULT GetUpdateResult( [in] LONG updateIndex,
+                             [out, retval] IUpdateInstallationResult **retval );
+}
+
+[
+    object,
+    oleautomation,
+    dual,
+    nonextensible,
+    uuid(5c209f0b-bad5-432a-9556-4699bed2638a),
+    pointer_default(unique),
+]
+interface IInstallationJob : IDispatch
+{
+    [propget, id(0x60020001)]
+    HRESULT AsyncState( [out, retval] VARIANT *retval );
+
+    [propget, id(0x60020002)]
+    HRESULT IsCompleted( [out, retval] VARIANT_BOOL *retval );
+
+    [propget, id(0x60020003)]
+    HRESULT Updates( [out, retval] IUpdateCollection **retval );
+
+    [id(0x60020004)]
+    HRESULT CleanUp();
+
+    [id(0x60020005)]
+    HRESULT GetProgress( [out, retval] IInstallationProgress **retval );
+
+    [id(0x60020006)]
+    HRESULT RequestAbort();
+}
+
+[
+    object,
+    oleautomation,
+    dual,
+    nonextensible,
+    uuid(a43c56d6-7451-48d4-af96-b6cd2d0d9b7a),
+    pointer_default(unique),
+]
+interface IInstallationResult : IDispatch
+{
+    [propget, id(0x60020001)]
+    HRESULT HResult( [out, retval] LONG *retval );
+
+    [propget, id(0x60020002)]
+    HRESULT RebootRequired( [out, retval] VARIANT_BOOL *retval );
+
+    [propget, id(0x60020003)]
+    HRESULT ResultCode( [out, retval] OperationResultCode *retval );
+
+    [id(0x60020004)]
+    HRESULT GetUpdateResult( [in] LONG updateIndex,
+                             [out, retval] IUpdateInstallationResult **retval );
+}
+
+[
+    object,
+    uuid(7b929c68-ccdc-4226-96b1-8724600b54c2),
+    oleautomation,
+    dual,
+    nonextensible,
+    pointer_default(unique),
+]
+interface IUpdateInstaller : IDispatch
+{
+    [propget]
+    HRESULT ClientApplicationID(
+        [out, retval] BSTR *retval);
+
+    [propput]
+    HRESULT ClientApplicationID(
+        [in] BSTR value);
+
+    [propget]
+    HRESULT IsForced(
+        [out, retval] VARIANT_BOOL *retval);
+
+    [propput]
+    HRESULT IsForced(
+        [in] VARIANT_BOOL value);
+
+    [propget, restricted]
+    HRESULT ParentHwnd(
+        [out, retval] HWND *retval);
+
+    [propput, restricted]
+    HRESULT ParentHwnd(
+        [in, unique] HWND value);
+
+    [propput]
+    HRESULT ParentWindow(
+        [in, unique] IUnknown *value);
+
+    [propget]
+    HRESULT ParentWindow(
+        [out, retval] IUnknown **retval);
+
+    [propget]
+    HRESULT Updates(
+        [out, retval] IUpdateCollection **retval);
+
+    [propput]
+    HRESULT Updates(
+        [in] IUpdateCollection *value);
+
+    HRESULT BeginInstall(
+        [in] IUnknown *onProgressChanged,
+        [in] IUnknown *onCompleted,
+        [in] VARIANT state,
+        [out, retval] IInstallationJob **retval);
+
+    HRESULT BeginUninstall(
+        [in] IUnknown *onProgressChanged,
+        [in] IUnknown *onCompleted,
+        [in] VARIANT state,
+        [out, retval] IInstallationJob **retval);
+
+    HRESULT EndInstall(
+        [in] IInstallationJob *value,
+        [out, retval] IInstallationResult **retval);
+
+    HRESULT EndUninstall(
+        [in] IInstallationJob *value,
+        [out, retval] IInstallationResult **retval);
+
+    HRESULT Install(
+        [out, retval] IInstallationResult **retval);
+
+    HRESULT RunWizard(
+        [in, defaultvalue("")] BSTR dialogTitle,
+        [out, retval] IInstallationResult **retval);
+
+    [propget]
+    HRESULT IsBusy(
+        [out, retval] VARIANT_BOOL *retval);
+
+    HRESULT Uninstall(
+        [out, retval] IInstallationResult **retval);
+
+    [propget]
+    HRESULT AllowSourcePrompts(
+        [out, retval] VARIANT_BOOL *retval);
+
+    [propput]
+    HRESULT AllowSourcePrompts(
+        [in] VARIANT_BOOL value);
+
+    [propget]
+    HRESULT RebootRequiredBeforeInstallation(
+        [out, retval] VARIANT_BOOL *retval);
+}
+
+[
+    object,
+    uuid(ADE87BF7-7B56-4275-8FAB-B9B0E591844B),
+    oleautomation,
+    hidden,
+    dual,
+    nonextensible,
+    pointer_default(unique),
+]
+interface ISystemInformation : IDispatch
+{
+    [propget]
+    HRESULT OemHardwareSupportLink(
+        [out, retval] BSTR *retval);
+
+    [propget]
+    HRESULT RebootRequired(
+        [out, retval] VARIANT_BOOL *retval);
+}
+
+[
+    helpstring("AutomaticUpdates Class"),
+    threading(both),
+    progid("Microsoft.Update.AutoUpdate.1"),
+    vi_progid("Microsoft.Update.AutoUpdate"),
+    uuid(bfe18e9c-6d87-4450-b37c-e02f0b373803)
+]
+coclass AutomaticUpdates { interface IAutomaticUpdates; }
+
+[
+    helpstring("UpdateInstaller Class"),
+    threading(both),
+    progid("Microsoft.Update.Installer.1"),
+    vi_progid("Microsoft.Update.Installer"),
+    uuid(d2e0fe7f-d23e-48e1-93c0-6fa8cc346474)
+]
+coclass UpdateInstaller { interface IUpdateInstaller; }
+
+[
+    helpstring("UpdateSession Class"),
+    threading(both),
+    progid("Microsoft.Update.Session.1"),
+    vi_progid("Microsoft.Update.Session"),
+    uuid(4cb43d7f-7eee-4906-8698-60da1c38f2fe)
+]
+coclass UpdateSession { interface IUpdateSession; }
+
+[
+    helpstring("SystemInformation Class"),
+    threading(both),
+    progid("Microsoft.Update.SystemInfo.1"),
+    vi_progid("Microsoft.Update.SystemInfo"),
+    uuid(C01B9BA0-BEA7-41BA-B604-D0A36F469133)
+]
+coclass SystemInformation { interface ISystemInformation; }
+
+} /* WUApiLib */