Sync to Wine-0_9_4:
authorGé van Geldorp <ge@gse.nl>
Mon, 26 Dec 2005 23:31:24 +0000 (23:31 +0000)
committerGé van Geldorp <ge@gse.nl>
Mon, 26 Dec 2005 23:31:24 +0000 (23:31 +0000)
Thomas Weidenmueller <wine-patches@reactsoft.com>
- urlmon: Correctly fix IStream::Read.
  Don't dereference a possible NULL pointer.
- urlmon: Fix call to ReadFile.
  The BytesRead parameter passed to ReadFile may never be NULL.
Jacek Caban <jacek@codeweavers.com>
- urlmon: Added handling of BINDF_FROMURLMON in file protocol.
- urlmon: Added some tests and fixes of file protocol.
- urlmon: Fix BindToStorage test.

svn path=/trunk/; revision=20355

reactos/lib/urlmon/binding.c
reactos/lib/urlmon/file.c
reactos/lib/urlmon/umstream.c
reactos/w32api/include/urlmon.h

index 6b62c78..d94de61 100644 (file)
@@ -401,7 +401,7 @@ static HRESULT get_callback(IBindCtx *pbc, IBindStatusCallback **callback)
 
     hres = IBindCtx_GetObjectParam(pbc, wszBSCBHolder, (IUnknown**)callback);
     if(FAILED(hres))
-        return INET_E_DATA_NOT_AVAILABLE;
+        return MK_E_SYNTAX;
 
     return S_OK;
 }
index 61c312c..b1b156c 100644 (file)
@@ -110,7 +110,9 @@ static HRESULT WINAPI FileProtocol_Start(IInternetProtocol *iface, LPCWSTR szUrl
     LARGE_INTEGER size;
     DWORD len;
     LPWSTR url, mime = NULL;
+    LPCWSTR file_name;
     WCHAR null_char = 0;
+    BOOL first_call = FALSE;
     HRESULT hres;
 
     static const WCHAR wszFile[]  = {'f','i','l','e',':'};
@@ -134,33 +136,42 @@ static HRESULT WINAPI FileProtocol_Start(IInternetProtocol *iface, LPCWSTR szUrl
         return hres;
     }
 
-    hres = FindMimeFromData(NULL, url, NULL, 0, NULL, 0, &mime, 0);
-    if(SUCCEEDED(hres))
-        IInternetProtocolSink_ReportProgress(pOIProtSink, BINDSTATUS_DIRECTBIND, mime);
+    if(!(grfBINDF & BINDF_FROMURLMON))
+        IInternetProtocolSink_ReportProgress(pOIProtSink, BINDSTATUS_DIRECTBIND, NULL);
 
     if(!This->file) {
+        first_call = TRUE;
+
         IInternetProtocolSink_ReportProgress(pOIProtSink, BINDSTATUS_SENDINGREQUEST, &null_char);
 
-        This->file = CreateFileW(url+sizeof(wszFile)/sizeof(WCHAR), GENERIC_READ, FILE_SHARE_READ,
-                NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
+        file_name = url+sizeof(wszFile)/sizeof(WCHAR);
+        if(file_name[0] == '/' && file_name[1] == '/' && file_name[2] == '/')
+            file_name += 3;
+
+        This->file = CreateFileW(file_name, GENERIC_READ, FILE_SHARE_READ, NULL,
+                                 OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
 
         if(This->file == INVALID_HANDLE_VALUE) {
             This->file = NULL;
             IInternetProtocolSink_ReportResult(pOIProtSink, INET_E_RESOURCE_NOT_FOUND,
                     GetLastError(), NULL);
             HeapFree(GetProcessHeap(), 0, url);
-            CoTaskMemFree(mime);
             return INET_E_RESOURCE_NOT_FOUND;
         }
 
-        IInternetProtocolSink_ReportProgress(pOIProtSink, BINDSTATUS_CACHEFILENAMEAVAILABLE,
-                url+sizeof(wszFile)/sizeof(WCHAR));
-        if(mime)
-            IInternetProtocolSink_ReportProgress(pOIProtSink, BINDSTATUS_MIMETYPEAVAILABLE, mime);
-        IInternetProtocolSink_ReportResult(pOIProtSink, S_OK, 0, NULL);
+        IInternetProtocolSink_ReportProgress(pOIProtSink,
+                BINDSTATUS_CACHEFILENAMEAVAILABLE, file_name);
+
+        hres = FindMimeFromData(NULL, url, NULL, 0, NULL, 0, &mime, 0);
+        if(SUCCEEDED(hres)) {
+            IInternetProtocolSink_ReportProgress(pOIProtSink,
+                    (grfBINDF & BINDF_FROMURLMON) ?
+                    BINDSTATUS_VERIFIEDMIMETYPEAVAILABLE : BINDSTATUS_MIMETYPEAVAILABLE,
+                    mime);
+            CoTaskMemFree(mime);
+        }
     }
 
-    CoTaskMemFree(mime);
     HeapFree(GetProcessHeap(), 0, url);
 
     if(GetFileSizeEx(This->file, &size))
@@ -168,6 +179,9 @@ static HRESULT WINAPI FileProtocol_Start(IInternetProtocol *iface, LPCWSTR szUrl
                 BSCF_FIRSTDATANOTIFICATION|BSCF_LASTDATANOTIFICATION,
                 size.u.LowPart, size.u.LowPart);
 
+    if(first_call)
+        IInternetProtocolSink_ReportResult(pOIProtSink, S_OK, 0, NULL);
+
     return S_OK;
 }
 
index f907317..36909b6 100644 (file)
@@ -225,6 +225,7 @@ static HRESULT WINAPI IStream_fnRead (IStream * iface,
                                       ULONG cb,
                                       ULONG* pcbRead)
 {
+    ULONG dwBytesRead;
     IUMCacheStream *This = (IUMCacheStream *)iface;
 
     TRACE("(%p)->(%p,0x%08lx,%p)\n",This, pv, cb, pcbRead);
@@ -232,7 +233,10 @@ static HRESULT WINAPI IStream_fnRead (IStream * iface,
     if ( !pv )
        return STG_E_INVALIDPOINTER;
 
-    if ( ! ReadFile( This->handle, pv, cb, pcbRead, NULL ) )
+    if ( !pcbRead)
+        pcbRead = &dwBytesRead;
+
+    if ( ! ReadFile( This->handle, pv, cb, (LPDWORD)pcbRead, NULL ) )
        return S_FALSE;
 
     if (!*pcbRead)
index 251ba62..23e22c1 100644 (file)
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 0.9.1 from urlmon.idl - Do not edit ***/
+/*** Autogenerated by WIDL 0.9.4 from urlmon.idl - Do not edit ***/
 #include <rpc.h>
 #include <rpcndr.h>
 
@@ -13,12 +13,12 @@ extern "C" {
 #include <msxml.h>
 #ifndef __IInternetProtocolSink_FWD_DEFINED__
 #define __IInternetProtocolSink_FWD_DEFINED__
-typedef struct IInternetProtocolSink IInternetProtocolSink;
+typedef interface IInternetProtocolSink IInternetProtocolSink;
 #endif
 
 #ifndef __IBinding_FWD_DEFINED__
 #define __IBinding_FWD_DEFINED__
-typedef struct IBinding IBinding;
+typedef interface IBinding IBinding;
 #endif
 
 typedef IBinding *LPBINDING;
@@ -30,7 +30,7 @@ typedef IBinding *LPBINDING;
 
 DEFINE_GUID(IID_IBinding, 0x79eac9c0, 0xbaf9, 0x11ce, 0x8c,0x82, 0x00,0xaa,0x00,0x4b,0xa9,0x0b);
 #if defined(__cplusplus) && !defined(CINTERFACE)
-struct IBinding : public IUnknown
+interface IBinding : public IUnknown
 {
     virtual HRESULT STDMETHODCALLTYPE Abort(
         ) = 0;
@@ -55,11 +55,7 @@ struct IBinding : public IUnknown
 
 };
 #else
-typedef struct IBindingVtbl IBindingVtbl;
-struct IBinding {
-    const IBindingVtbl* lpVtbl;
-};
-struct IBindingVtbl {
+typedef struct IBindingVtbl {
     BEGIN_INTERFACE
 
     /*** IUnknown methods ***/
@@ -100,6 +96,9 @@ struct IBindingVtbl {
         DWORD* pdwReserved);
 
     END_INTERFACE
+} IBindingVtbl;
+interface IBinding {
+    const IBindingVtbl* lpVtbl;
 };
 
 #ifdef COBJMACROS
@@ -121,38 +120,38 @@ struct IBindingVtbl {
 HRESULT CALLBACK IBinding_Abort_Proxy(
     IBinding* This);
 void __RPC_STUB IBinding_Abort_Stub(
-    struct IRpcStubBuffer* This,
-    struct IRpcChannelBuffer* pRpcChannelBuffer,
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
     PRPC_MESSAGE pRpcMessage,
     DWORD* pdwStubPhase);
 HRESULT CALLBACK IBinding_Suspend_Proxy(
     IBinding* This);
 void __RPC_STUB IBinding_Suspend_Stub(
-    struct IRpcStubBuffer* This,
-    struct IRpcChannelBuffer* pRpcChannelBuffer,
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
     PRPC_MESSAGE pRpcMessage,
     DWORD* pdwStubPhase);
 HRESULT CALLBACK IBinding_Resume_Proxy(
     IBinding* This);
 void __RPC_STUB IBinding_Resume_Stub(
-    struct IRpcStubBuffer* This,
-    struct IRpcChannelBuffer* pRpcChannelBuffer,
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
     PRPC_MESSAGE pRpcMessage,
     DWORD* pdwStubPhase);
 HRESULT CALLBACK IBinding_SetPriority_Proxy(
     IBinding* This,
     LONG nPriority);
 void __RPC_STUB IBinding_SetPriority_Stub(
-    struct IRpcStubBuffer* This,
-    struct IRpcChannelBuffer* pRpcChannelBuffer,
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
     PRPC_MESSAGE pRpcMessage,
     DWORD* pdwStubPhase);
 HRESULT CALLBACK IBinding_GetPriority_Proxy(
     IBinding* This,
     LONG* pnPriority);
 void __RPC_STUB IBinding_GetPriority_Stub(
-    struct IRpcStubBuffer* This,
-    struct IRpcChannelBuffer* pRpcChannelBuffer,
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
     PRPC_MESSAGE pRpcMessage,
     DWORD* pdwStubPhase);
 HRESULT CALLBACK IBinding_RemoteGetBindResult_Proxy(
@@ -162,8 +161,8 @@ HRESULT CALLBACK IBinding_RemoteGetBindResult_Proxy(
     LPOLESTR* pszResult,
     DWORD dwReserved);
 void __RPC_STUB IBinding_RemoteGetBindResult_Stub(
-    struct IRpcStubBuffer* This,
-    struct IRpcChannelBuffer* pRpcChannelBuffer,
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
     PRPC_MESSAGE pRpcMessage,
     DWORD* pdwStubPhase);
 HRESULT CALLBACK IBinding_GetBindResult_Proxy(
@@ -183,7 +182,7 @@ HRESULT __RPC_STUB IBinding_GetBindResult_Stub(
 
 #ifndef __IBindStatusCallback_FWD_DEFINED__
 #define __IBindStatusCallback_FWD_DEFINED__
-typedef struct IBindStatusCallback IBindStatusCallback;
+typedef interface IBindStatusCallback IBindStatusCallback;
 #endif
 
 typedef IBindStatusCallback *LPBINDSTATUSCALLBACK;
@@ -291,7 +290,7 @@ typedef enum BINDSTATUS {
     BINDSTATUS_ENDUPLOADINGDATA,
     BINDSTATUS_PROTOCOLCLASSID,
     BINDSTATUS_ENCODING,
-    BINDSTATUS_VERFIEDMIMETYPEAVAILABLE,
+    BINDSTATUS_VERIFIEDMIMETYPEAVAILABLE,
     BINDSTATUS_CLASSINSTALLLOCATION,
     BINDSTATUS_DECODING,
     BINDSTATUS_LOADINGMIMEHANDLER,
@@ -317,7 +316,11 @@ typedef enum BINDSTATUS {
     BINDSTATUS_SESSION_COOKIE_RECEIVED,
     BINDSTATUS_PERSISTENT_COOKIE_RECEIVED,
     BINDSTATUS_SESSION_COOKIES_ALLOWED,
-    BINDSTATUS_CACHECONTROL
+    BINDSTATUS_CACHECONTROL,
+    BINDSTATUS_CONTENTDISPOSITIONFILENAME,
+    BINDSTATUS_MIMETEXTPLAINMISMATCH,
+    BINDSTATUS_PUBLISHERAVAILABLE,
+    BINDSTATUS_DISPLAYNAMEAVAILABLE
 } BINDSTATUS;
 /*****************************************************************************
  * IBindStatusCallback interface
@@ -327,7 +330,7 @@ typedef enum BINDSTATUS {
 
 DEFINE_GUID(IID_IBindStatusCallback, 0x79eac9c1, 0xbaf9, 0x11ce, 0x8c,0x82, 0x00,0xaa,0x00,0x4b,0xa9,0x0b);
 #if defined(__cplusplus) && !defined(CINTERFACE)
-struct IBindStatusCallback : public IUnknown
+interface IBindStatusCallback : public IUnknown
 {
     virtual HRESULT STDMETHODCALLTYPE OnStartBinding(
         DWORD dwReserved,
@@ -365,11 +368,7 @@ struct IBindStatusCallback : public IUnknown
 
 };
 #else
-typedef struct IBindStatusCallbackVtbl IBindStatusCallbackVtbl;
-struct IBindStatusCallback {
-    const IBindStatusCallbackVtbl* lpVtbl;
-};
-struct IBindStatusCallbackVtbl {
+typedef struct IBindStatusCallbackVtbl {
     BEGIN_INTERFACE
 
     /*** IUnknown methods ***/
@@ -428,6 +427,9 @@ struct IBindStatusCallbackVtbl {
         IUnknown* punk);
 
     END_INTERFACE
+} IBindStatusCallbackVtbl;
+interface IBindStatusCallback {
+    const IBindStatusCallbackVtbl* lpVtbl;
 };
 
 #ifdef COBJMACROS
@@ -453,24 +455,24 @@ HRESULT CALLBACK IBindStatusCallback_OnStartBinding_Proxy(
     DWORD dwReserved,
     IBinding* pib);
 void __RPC_STUB IBindStatusCallback_OnStartBinding_Stub(
-    struct IRpcStubBuffer* This,
-    struct IRpcChannelBuffer* pRpcChannelBuffer,
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
     PRPC_MESSAGE pRpcMessage,
     DWORD* pdwStubPhase);
 HRESULT CALLBACK IBindStatusCallback_GetPriority_Proxy(
     IBindStatusCallback* This,
     LONG* pnPriority);
 void __RPC_STUB IBindStatusCallback_GetPriority_Stub(
-    struct IRpcStubBuffer* This,
-    struct IRpcChannelBuffer* pRpcChannelBuffer,
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
     PRPC_MESSAGE pRpcMessage,
     DWORD* pdwStubPhase);
 HRESULT CALLBACK IBindStatusCallback_OnLowResource_Proxy(
     IBindStatusCallback* This,
     DWORD reserved);
 void __RPC_STUB IBindStatusCallback_OnLowResource_Stub(
-    struct IRpcStubBuffer* This,
-    struct IRpcChannelBuffer* pRpcChannelBuffer,
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
     PRPC_MESSAGE pRpcMessage,
     DWORD* pdwStubPhase);
 HRESULT CALLBACK IBindStatusCallback_OnProgress_Proxy(
@@ -480,8 +482,8 @@ HRESULT CALLBACK IBindStatusCallback_OnProgress_Proxy(
     ULONG ulStatusCode,
     LPCWSTR szStatusText);
 void __RPC_STUB IBindStatusCallback_OnProgress_Stub(
-    struct IRpcStubBuffer* This,
-    struct IRpcChannelBuffer* pRpcChannelBuffer,
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
     PRPC_MESSAGE pRpcMessage,
     DWORD* pdwStubPhase);
 HRESULT CALLBACK IBindStatusCallback_OnStopBinding_Proxy(
@@ -489,8 +491,8 @@ HRESULT CALLBACK IBindStatusCallback_OnStopBinding_Proxy(
     HRESULT hresult,
     LPCWSTR szError);
 void __RPC_STUB IBindStatusCallback_OnStopBinding_Stub(
-    struct IRpcStubBuffer* This,
-    struct IRpcChannelBuffer* pRpcChannelBuffer,
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
     PRPC_MESSAGE pRpcMessage,
     DWORD* pdwStubPhase);
 HRESULT CALLBACK IBindStatusCallback_RemoteGetBindInfo_Proxy(
@@ -499,8 +501,8 @@ HRESULT CALLBACK IBindStatusCallback_RemoteGetBindInfo_Proxy(
     RemBINDINFO* pbindinfo,
     RemSTGMEDIUM* pstgmed);
 void __RPC_STUB IBindStatusCallback_RemoteGetBindInfo_Stub(
-    struct IRpcStubBuffer* This,
-    struct IRpcChannelBuffer* pRpcChannelBuffer,
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
     PRPC_MESSAGE pRpcMessage,
     DWORD* pdwStubPhase);
 HRESULT CALLBACK IBindStatusCallback_GetBindInfo_Proxy(
@@ -519,8 +521,8 @@ HRESULT CALLBACK IBindStatusCallback_RemoteOnDataAvailable_Proxy(
     RemFORMATETC* pformatetc,
     RemSTGMEDIUM* pstgmed);
 void __RPC_STUB IBindStatusCallback_RemoteOnDataAvailable_Stub(
-    struct IRpcStubBuffer* This,
-    struct IRpcChannelBuffer* pRpcChannelBuffer,
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
     PRPC_MESSAGE pRpcMessage,
     DWORD* pdwStubPhase);
 HRESULT CALLBACK IBindStatusCallback_OnDataAvailable_Proxy(
@@ -540,8 +542,8 @@ HRESULT CALLBACK IBindStatusCallback_OnObjectAvailable_Proxy(
     REFIID riid,
     IUnknown* punk);
 void __RPC_STUB IBindStatusCallback_OnObjectAvailable_Stub(
-    struct IRpcStubBuffer* This,
-    struct IRpcChannelBuffer* pRpcChannelBuffer,
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
     PRPC_MESSAGE pRpcMessage,
     DWORD* pdwStubPhase);
 
@@ -549,7 +551,7 @@ void __RPC_STUB IBindStatusCallback_OnObjectAvailable_Stub(
 
 #ifndef __IAuthenticate_FWD_DEFINED__
 #define __IAuthenticate_FWD_DEFINED__
-typedef struct IAuthenticate IAuthenticate;
+typedef interface IAuthenticate IAuthenticate;
 #endif
 
 typedef IAuthenticate *LPAUTHENTICATION;
@@ -561,7 +563,7 @@ typedef IAuthenticate *LPAUTHENTICATION;
 
 DEFINE_GUID(IID_IAuthenticate, 0x79eac9d0, 0xbaf9, 0x11ce, 0x8c,0x82, 0x00,0xaa,0x00,0x4b,0xa9,0x0b);
 #if defined(__cplusplus) && !defined(CINTERFACE)
-struct IAuthenticate : public IUnknown
+interface IAuthenticate : public IUnknown
 {
     virtual HRESULT STDMETHODCALLTYPE Authenticate(
         HWND* phwnd,
@@ -570,11 +572,7 @@ struct IAuthenticate : public IUnknown
 
 };
 #else
-typedef struct IAuthenticateVtbl IAuthenticateVtbl;
-struct IAuthenticate {
-    const IAuthenticateVtbl* lpVtbl;
-};
-struct IAuthenticateVtbl {
+typedef struct IAuthenticateVtbl {
     BEGIN_INTERFACE
 
     /*** IUnknown methods ***/
@@ -597,6 +595,9 @@ struct IAuthenticateVtbl {
         LPWSTR* pszPassword);
 
     END_INTERFACE
+} IAuthenticateVtbl;
+interface IAuthenticate {
+    const IAuthenticateVtbl* lpVtbl;
 };
 
 #ifdef COBJMACROS
@@ -616,8 +617,8 @@ HRESULT CALLBACK IAuthenticate_Authenticate_Proxy(
     LPWSTR* pszUsername,
     LPWSTR* pszPassword);
 void __RPC_STUB IAuthenticate_Authenticate_Stub(
-    struct IRpcStubBuffer* This,
-    struct IRpcChannelBuffer* pRpcChannelBuffer,
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
     PRPC_MESSAGE pRpcMessage,
     DWORD* pdwStubPhase);
 
@@ -625,7 +626,7 @@ void __RPC_STUB IAuthenticate_Authenticate_Stub(
 
 #ifndef __IHttpNegotiate_FWD_DEFINED__
 #define __IHttpNegotiate_FWD_DEFINED__
-typedef struct IHttpNegotiate IHttpNegotiate;
+typedef interface IHttpNegotiate IHttpNegotiate;
 #endif
 
 typedef IHttpNegotiate *LPHTTPNEGOTIATE;
@@ -637,7 +638,7 @@ typedef IHttpNegotiate *LPHTTPNEGOTIATE;
 
 DEFINE_GUID(IID_IHttpNegotiate, 0x79eac9d2, 0xbaf9, 0x11ce, 0x8c,0x82, 0x00,0xaa,0x00,0x4b,0xa9,0x0b);
 #if defined(__cplusplus) && !defined(CINTERFACE)
-struct IHttpNegotiate : public IUnknown
+interface IHttpNegotiate : public IUnknown
 {
     virtual HRESULT STDMETHODCALLTYPE BeginningTransaction(
         LPCWSTR szURL,
@@ -653,11 +654,7 @@ struct IHttpNegotiate : public IUnknown
 
 };
 #else
-typedef struct IHttpNegotiateVtbl IHttpNegotiateVtbl;
-struct IHttpNegotiate {
-    const IHttpNegotiateVtbl* lpVtbl;
-};
-struct IHttpNegotiateVtbl {
+typedef struct IHttpNegotiateVtbl {
     BEGIN_INTERFACE
 
     /*** IUnknown methods ***/
@@ -688,6 +685,9 @@ struct IHttpNegotiateVtbl {
         LPWSTR* pszAdditionalRequestHeaders);
 
     END_INTERFACE
+} IHttpNegotiateVtbl;
+interface IHttpNegotiate {
+    const IHttpNegotiateVtbl* lpVtbl;
 };
 
 #ifdef COBJMACROS
@@ -709,8 +709,8 @@ HRESULT CALLBACK IHttpNegotiate_BeginningTransaction_Proxy(
     DWORD dwReserved,
     LPWSTR* pszAdditionalHeaders);
 void __RPC_STUB IHttpNegotiate_BeginningTransaction_Stub(
-    struct IRpcStubBuffer* This,
-    struct IRpcChannelBuffer* pRpcChannelBuffer,
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
     PRPC_MESSAGE pRpcMessage,
     DWORD* pdwStubPhase);
 HRESULT CALLBACK IHttpNegotiate_OnResponse_Proxy(
@@ -720,8 +720,8 @@ HRESULT CALLBACK IHttpNegotiate_OnResponse_Proxy(
     LPCWSTR szRequestHeaders,
     LPWSTR* pszAdditionalRequestHeaders);
 void __RPC_STUB IHttpNegotiate_OnResponse_Stub(
-    struct IRpcStubBuffer* This,
-    struct IRpcChannelBuffer* pRpcChannelBuffer,
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
     PRPC_MESSAGE pRpcMessage,
     DWORD* pdwStubPhase);
 
@@ -729,7 +729,7 @@ void __RPC_STUB IHttpNegotiate_OnResponse_Stub(
 
 #ifndef __IHttpNegotiate2_FWD_DEFINED__
 #define __IHttpNegotiate2_FWD_DEFINED__
-typedef struct IHttpNegotiate2 IHttpNegotiate2;
+typedef interface IHttpNegotiate2 IHttpNegotiate2;
 #endif
 
 typedef IHttpNegotiate2 *LPHTTPNEGOTIATE2;
@@ -741,7 +741,7 @@ typedef IHttpNegotiate2 *LPHTTPNEGOTIATE2;
 
 DEFINE_GUID(IID_IHttpNegotiate2, 0x4f9f9fcb, 0xe0f4, 0x48eb, 0xb7,0xab, 0xfa,0x2e,0xa9,0x36,0x5c,0xb4);
 #if defined(__cplusplus) && !defined(CINTERFACE)
-struct IHttpNegotiate2 : public IHttpNegotiate
+interface IHttpNegotiate2 : public IHttpNegotiate
 {
     virtual HRESULT STDMETHODCALLTYPE GetRootSecurityId(
         BYTE* pbSecurityId,
@@ -750,11 +750,7 @@ struct IHttpNegotiate2 : public IHttpNegotiate
 
 };
 #else
-typedef struct IHttpNegotiate2Vtbl IHttpNegotiate2Vtbl;
-struct IHttpNegotiate2 {
-    const IHttpNegotiate2Vtbl* lpVtbl;
-};
-struct IHttpNegotiate2Vtbl {
+typedef struct IHttpNegotiate2Vtbl {
     BEGIN_INTERFACE
 
     /*** IUnknown methods ***/
@@ -792,6 +788,9 @@ struct IHttpNegotiate2Vtbl {
         DWORD_PTR dwReserved);
 
     END_INTERFACE
+} IHttpNegotiate2Vtbl;
+interface IHttpNegotiate2 {
+    const IHttpNegotiate2Vtbl* lpVtbl;
 };
 
 #ifdef COBJMACROS
@@ -814,8 +813,8 @@ HRESULT CALLBACK IHttpNegotiate2_GetRootSecurityId_Proxy(
     DWORD* pcbSecurityId,
     DWORD_PTR dwReserved);
 void __RPC_STUB IHttpNegotiate2_GetRootSecurityId_Stub(
-    struct IRpcStubBuffer* This,
-    struct IRpcChannelBuffer* pRpcChannelBuffer,
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
     PRPC_MESSAGE pRpcMessage,
     DWORD* pdwStubPhase);
 
@@ -825,7 +824,7 @@ void __RPC_STUB IHttpNegotiate2_GetRootSecurityId_Stub(
 #define SID_SBindHost IID_IBindHost
 #ifndef __IBindHost_FWD_DEFINED__
 #define __IBindHost_FWD_DEFINED__
-typedef struct IBindHost IBindHost;
+typedef interface IBindHost IBindHost;
 #endif
 
 typedef IBindHost *LPBINDHOST;
@@ -837,7 +836,7 @@ typedef IBindHost *LPBINDHOST;
 
 DEFINE_GUID(IID_IBindHost, 0xfc4801a1, 0x2ba9, 0x11cf, 0xa2,0x29, 0x00,0xaa,0x00,0x3d,0x73,0x52);
 #if defined(__cplusplus) && !defined(CINTERFACE)
-struct IBindHost : public IUnknown
+interface IBindHost : public IUnknown
 {
     virtual HRESULT STDMETHODCALLTYPE CreateMoniker(
         LPOLESTR szName,
@@ -861,11 +860,7 @@ struct IBindHost : public IUnknown
 
 };
 #else
-typedef struct IBindHostVtbl IBindHostVtbl;
-struct IBindHost {
-    const IBindHostVtbl* lpVtbl;
-};
-struct IBindHostVtbl {
+typedef struct IBindHostVtbl {
     BEGIN_INTERFACE
 
     /*** IUnknown methods ***/
@@ -905,6 +900,9 @@ struct IBindHostVtbl {
         void** ppvObj);
 
     END_INTERFACE
+} IBindHostVtbl;
+interface IBindHost {
+    const IBindHostVtbl* lpVtbl;
 };
 
 #ifdef COBJMACROS
@@ -927,8 +925,8 @@ HRESULT CALLBACK IBindHost_CreateMoniker_Proxy(
     IMoniker** ppmk,
     DWORD dwReserved);
 void __RPC_STUB IBindHost_CreateMoniker_Stub(
-    struct IRpcStubBuffer* This,
-    struct IRpcChannelBuffer* pRpcChannelBuffer,
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
     PRPC_MESSAGE pRpcMessage,
     DWORD* pdwStubPhase);
 HRESULT CALLBACK IBindHost_RemoteMonikerBindToStorage_Proxy(
@@ -939,8 +937,8 @@ HRESULT CALLBACK IBindHost_RemoteMonikerBindToStorage_Proxy(
     REFIID riid,
     IUnknown** ppvObj);
 void __RPC_STUB IBindHost_RemoteMonikerBindToStorage_Stub(
-    struct IRpcStubBuffer* This,
-    struct IRpcChannelBuffer* pRpcChannelBuffer,
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
     PRPC_MESSAGE pRpcMessage,
     DWORD* pdwStubPhase);
 HRESULT CALLBACK IBindHost_MonikerBindToStorage_Proxy(
@@ -965,8 +963,8 @@ HRESULT CALLBACK IBindHost_RemoteMonikerBindToObject_Proxy(
     REFIID riid,
     IUnknown** ppvObj);
 void __RPC_STUB IBindHost_RemoteMonikerBindToObject_Stub(
-    struct IRpcStubBuffer* This,
-    struct IRpcChannelBuffer* pRpcChannelBuffer,
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
     PRPC_MESSAGE pRpcMessage,
     DWORD* pdwStubPhase);
 HRESULT CALLBACK IBindHost_MonikerBindToObject_Proxy(
@@ -988,7 +986,7 @@ HRESULT __RPC_STUB IBindHost_MonikerBindToObject_Stub(
 
 #ifndef __IWinInetInfo_FWD_DEFINED__
 #define __IWinInetInfo_FWD_DEFINED__
-typedef struct IWinInetInfo IWinInetInfo;
+typedef interface IWinInetInfo IWinInetInfo;
 #endif
 
 typedef IWinInetInfo *LPWININETINFO;
@@ -1000,7 +998,7 @@ typedef IWinInetInfo *LPWININETINFO;
 
 DEFINE_GUID(IID_IWinInetInfo, 0x79eac9d6, 0xbafa, 0x11ce, 0x8c,0x82, 0x00,0xaa,0x00,0x4b,0xa9,0x0b);
 #if defined(__cplusplus) && !defined(CINTERFACE)
-struct IWinInetInfo : public IUnknown
+interface IWinInetInfo : public IUnknown
 {
     virtual HRESULT STDMETHODCALLTYPE QueryOption(
         DWORD dwOption,
@@ -1009,11 +1007,7 @@ struct IWinInetInfo : public IUnknown
 
 };
 #else
-typedef struct IWinInetInfoVtbl IWinInetInfoVtbl;
-struct IWinInetInfo {
-    const IWinInetInfoVtbl* lpVtbl;
-};
-struct IWinInetInfoVtbl {
+typedef struct IWinInetInfoVtbl {
     BEGIN_INTERFACE
 
     /*** IUnknown methods ***/
@@ -1036,6 +1030,9 @@ struct IWinInetInfoVtbl {
         DWORD* pcbBuf);
 
     END_INTERFACE
+} IWinInetInfoVtbl;
+interface IWinInetInfo {
+    const IWinInetInfoVtbl* lpVtbl;
 };
 
 #ifdef COBJMACROS
@@ -1055,8 +1052,8 @@ HRESULT CALLBACK IWinInetInfo_RemoteQueryOption_Proxy(
     BYTE* pBuffer,
     DWORD* pcbBuf);
 void __RPC_STUB IWinInetInfo_RemoteQueryOption_Stub(
-    struct IRpcStubBuffer* This,
-    struct IRpcChannelBuffer* pRpcChannelBuffer,
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
     PRPC_MESSAGE pRpcMessage,
     DWORD* pdwStubPhase);
 HRESULT CALLBACK IWinInetInfo_QueryOption_Proxy(
@@ -1074,7 +1071,7 @@ HRESULT __RPC_STUB IWinInetInfo_QueryOption_Stub(
 
 #ifndef __IWinInetHttpInfo_FWD_DEFINED__
 #define __IWinInetHttpInfo_FWD_DEFINED__
-typedef struct IWinInetHttpInfo IWinInetHttpInfo;
+typedef interface IWinInetHttpInfo IWinInetHttpInfo;
 #endif
 
 typedef IWinInetHttpInfo *LPWININETHTTPINFO;
@@ -1086,7 +1083,7 @@ typedef IWinInetHttpInfo *LPWININETHTTPINFO;
 
 DEFINE_GUID(IID_IWinInetHttpInfo, 0x79eac9d8, 0xbafa, 0x11ce, 0x8c,0x82, 0x00,0xaa,0x00,0x4b,0xa9,0x0b);
 #if defined(__cplusplus) && !defined(CINTERFACE)
-struct IWinInetHttpInfo : public IWinInetInfo
+interface IWinInetHttpInfo : public IWinInetInfo
 {
     virtual HRESULT STDMETHODCALLTYPE QueryInfo(
         DWORD dwOption,
@@ -1097,11 +1094,7 @@ struct IWinInetHttpInfo : public IWinInetInfo
 
 };
 #else
-typedef struct IWinInetHttpInfoVtbl IWinInetHttpInfoVtbl;
-struct IWinInetHttpInfo {
-    const IWinInetHttpInfoVtbl* lpVtbl;
-};
-struct IWinInetHttpInfoVtbl {
+typedef struct IWinInetHttpInfoVtbl {
     BEGIN_INTERFACE
 
     /*** IUnknown methods ***/
@@ -1133,6 +1126,9 @@ struct IWinInetHttpInfoVtbl {
         DWORD* pdwReserved);
 
     END_INTERFACE
+} IWinInetHttpInfoVtbl;
+interface IWinInetHttpInfo {
+    const IWinInetHttpInfoVtbl* lpVtbl;
 };
 
 #ifdef COBJMACROS
@@ -1156,8 +1152,8 @@ HRESULT CALLBACK IWinInetHttpInfo_RemoteQueryInfo_Proxy(
     DWORD* pdwFlags,
     DWORD* pdwReserved);
 void __RPC_STUB IWinInetHttpInfo_RemoteQueryInfo_Stub(
-    struct IRpcStubBuffer* This,
-    struct IRpcChannelBuffer* pRpcChannelBuffer,
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
     PRPC_MESSAGE pRpcMessage,
     DWORD* pdwStubPhase);
 HRESULT CALLBACK IWinInetHttpInfo_QueryInfo_Proxy(
@@ -1179,7 +1175,7 @@ HRESULT __RPC_STUB IWinInetHttpInfo_QueryInfo_Stub(
 
 #ifndef __IPersistMoniker_FWD_DEFINED__
 #define __IPersistMoniker_FWD_DEFINED__
-typedef struct IPersistMoniker IPersistMoniker;
+typedef interface IPersistMoniker IPersistMoniker;
 #endif
 
 typedef IPersistMoniker *LPPERSISTMONIKER;
@@ -1191,7 +1187,7 @@ typedef IPersistMoniker *LPPERSISTMONIKER;
 
 DEFINE_GUID(IID_IPersistMoniker, 0x79eac9c9, 0xbaf9, 0x11ce, 0x8c,0x82, 0x00,0xaa,0x00,0x4b,0xa9,0x0b);
 #if defined(__cplusplus) && !defined(CINTERFACE)
-struct IPersistMoniker : public IUnknown
+interface IPersistMoniker : public IUnknown
 {
     virtual HRESULT STDMETHODCALLTYPE GetClassID(
         CLSID* pClassID) = 0;
@@ -1219,11 +1215,7 @@ struct IPersistMoniker : public IUnknown
 
 };
 #else
-typedef struct IPersistMonikerVtbl IPersistMonikerVtbl;
-struct IPersistMoniker {
-    const IPersistMonikerVtbl* lpVtbl;
-};
-struct IPersistMonikerVtbl {
+typedef struct IPersistMonikerVtbl {
     BEGIN_INTERFACE
 
     /*** IUnknown methods ***/
@@ -1269,6 +1261,9 @@ struct IPersistMonikerVtbl {
         IMoniker** ppimkName);
 
     END_INTERFACE
+} IPersistMonikerVtbl;
+interface IPersistMoniker {
+    const IPersistMonikerVtbl* lpVtbl;
 };
 
 #ifdef COBJMACROS
@@ -1291,15 +1286,15 @@ HRESULT CALLBACK IPersistMoniker_GetClassID_Proxy(
     IPersistMoniker* This,
     CLSID* pClassID);
 void __RPC_STUB IPersistMoniker_GetClassID_Stub(
-    struct IRpcStubBuffer* This,
-    struct IRpcChannelBuffer* pRpcChannelBuffer,
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
     PRPC_MESSAGE pRpcMessage,
     DWORD* pdwStubPhase);
 HRESULT CALLBACK IPersistMoniker_IsDirty_Proxy(
     IPersistMoniker* This);
 void __RPC_STUB IPersistMoniker_IsDirty_Stub(
-    struct IRpcStubBuffer* This,
-    struct IRpcChannelBuffer* pRpcChannelBuffer,
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
     PRPC_MESSAGE pRpcMessage,
     DWORD* pdwStubPhase);
 HRESULT CALLBACK IPersistMoniker_Load_Proxy(
@@ -1309,8 +1304,8 @@ HRESULT CALLBACK IPersistMoniker_Load_Proxy(
     LPBC pibc,
     DWORD grfMode);
 void __RPC_STUB IPersistMoniker_Load_Stub(
-    struct IRpcStubBuffer* This,
-    struct IRpcChannelBuffer* pRpcChannelBuffer,
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
     PRPC_MESSAGE pRpcMessage,
     DWORD* pdwStubPhase);
 HRESULT CALLBACK IPersistMoniker_Save_Proxy(
@@ -1319,8 +1314,8 @@ HRESULT CALLBACK IPersistMoniker_Save_Proxy(
     LPBC pbc,
     BOOL fRemember);
 void __RPC_STUB IPersistMoniker_Save_Stub(
-    struct IRpcStubBuffer* This,
-    struct IRpcChannelBuffer* pRpcChannelBuffer,
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
     PRPC_MESSAGE pRpcMessage,
     DWORD* pdwStubPhase);
 HRESULT CALLBACK IPersistMoniker_SaveCompleted_Proxy(
@@ -1328,16 +1323,16 @@ HRESULT CALLBACK IPersistMoniker_SaveCompleted_Proxy(
     IMoniker* pimkName,
     LPBC pibc);
 void __RPC_STUB IPersistMoniker_SaveCompleted_Stub(
-    struct IRpcStubBuffer* This,
-    struct IRpcChannelBuffer* pRpcChannelBuffer,
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
     PRPC_MESSAGE pRpcMessage,
     DWORD* pdwStubPhase);
 HRESULT CALLBACK IPersistMoniker_GetCurMoniker_Proxy(
     IPersistMoniker* This,
     IMoniker** ppimkName);
 void __RPC_STUB IPersistMoniker_GetCurMoniker_Stub(
-    struct IRpcStubBuffer* This,
-    struct IRpcChannelBuffer* pRpcChannelBuffer,
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
     PRPC_MESSAGE pRpcMessage,
     DWORD* pdwStubPhase);
 
@@ -1345,7 +1340,7 @@ void __RPC_STUB IPersistMoniker_GetCurMoniker_Stub(
 
 #ifndef __IMonikerProp_FWD_DEFINED__
 #define __IMonikerProp_FWD_DEFINED__
-typedef struct IMonikerProp IMonikerProp;
+typedef interface IMonikerProp IMonikerProp;
 #endif
 
 typedef IMonikerProp *LPMONIKERPROP;
@@ -1361,7 +1356,7 @@ typedef enum {
 
 DEFINE_GUID(IID_IMonikerProp, 0xa5ca5f7f, 0x1847, 0x4d87, 0x9c,0x5b, 0x91,0x85,0x09,0xf7,0x51,0x1d);
 #if defined(__cplusplus) && !defined(CINTERFACE)
-struct IMonikerProp : public IUnknown
+interface IMonikerProp : public IUnknown
 {
     virtual HRESULT STDMETHODCALLTYPE PutProperty(
         MONIKERPROPERTY mkp,
@@ -1369,11 +1364,7 @@ struct IMonikerProp : public IUnknown
 
 };
 #else
-typedef struct IMonikerPropVtbl IMonikerPropVtbl;
-struct IMonikerProp {
-    const IMonikerPropVtbl* lpVtbl;
-};
-struct IMonikerPropVtbl {
+typedef struct IMonikerPropVtbl {
     BEGIN_INTERFACE
 
     /*** IUnknown methods ***/
@@ -1395,6 +1386,9 @@ struct IMonikerPropVtbl {
         LPCWSTR val);
 
     END_INTERFACE
+} IMonikerPropVtbl;
+interface IMonikerProp {
+    const IMonikerPropVtbl* lpVtbl;
 };
 
 #ifdef COBJMACROS
@@ -1413,8 +1407,8 @@ HRESULT CALLBACK IMonikerProp_PutProperty_Proxy(
     MONIKERPROPERTY mkp,
     LPCWSTR val);
 void __RPC_STUB IMonikerProp_PutProperty_Stub(
-    struct IRpcStubBuffer* This,
-    struct IRpcChannelBuffer* pRpcChannelBuffer,
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
     PRPC_MESSAGE pRpcMessage,
     DWORD* pdwStubPhase);
 
@@ -1422,7 +1416,7 @@ void __RPC_STUB IMonikerProp_PutProperty_Stub(
 
 #ifndef __IInternetBindInfo_FWD_DEFINED__
 #define __IInternetBindInfo_FWD_DEFINED__
-typedef struct IInternetBindInfo IInternetBindInfo;
+typedef interface IInternetBindInfo IInternetBindInfo;
 #endif
 
 typedef IInternetBindInfo *LPIINTERNETBINDINFO;
@@ -1453,7 +1447,7 @@ typedef enum tagBINDSTRING {
 
 DEFINE_GUID(IID_IInternetBindInfo, 0x79eac9e1, 0xbaf9, 0x11ce, 0x8c,0x82, 0x00,0xaa,0x00,0x4b,0xa9,0x0b);
 #if defined(__cplusplus) && !defined(CINTERFACE)
-struct IInternetBindInfo : public IUnknown
+interface IInternetBindInfo : public IUnknown
 {
     virtual HRESULT STDMETHODCALLTYPE GetBindInfo(
         DWORD* grfBINDF,
@@ -1467,11 +1461,7 @@ struct IInternetBindInfo : public IUnknown
 
 };
 #else
-typedef struct IInternetBindInfoVtbl IInternetBindInfoVtbl;
-struct IInternetBindInfo {
-    const IInternetBindInfoVtbl* lpVtbl;
-};
-struct IInternetBindInfoVtbl {
+typedef struct IInternetBindInfoVtbl {
     BEGIN_INTERFACE
 
     /*** IUnknown methods ***/
@@ -1500,6 +1490,9 @@ struct IInternetBindInfoVtbl {
         ULONG* pcElFetched);
 
     END_INTERFACE
+} IInternetBindInfoVtbl;
+interface IInternetBindInfo {
+    const IInternetBindInfoVtbl* lpVtbl;
 };
 
 #ifdef COBJMACROS
@@ -1519,8 +1512,8 @@ HRESULT CALLBACK IInternetBindInfo_GetBindInfo_Proxy(
     DWORD* grfBINDF,
     BINDINFO* pbindinfo);
 void __RPC_STUB IInternetBindInfo_GetBindInfo_Stub(
-    struct IRpcStubBuffer* This,
-    struct IRpcChannelBuffer* pRpcChannelBuffer,
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
     PRPC_MESSAGE pRpcMessage,
     DWORD* pdwStubPhase);
 HRESULT CALLBACK IInternetBindInfo_GetBindString_Proxy(
@@ -1530,8 +1523,8 @@ HRESULT CALLBACK IInternetBindInfo_GetBindString_Proxy(
     ULONG cEl,
     ULONG* pcElFetched);
 void __RPC_STUB IInternetBindInfo_GetBindString_Stub(
-    struct IRpcStubBuffer* This,
-    struct IRpcChannelBuffer* pRpcChannelBuffer,
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
     PRPC_MESSAGE pRpcMessage,
     DWORD* pdwStubPhase);
 
@@ -1539,7 +1532,7 @@ void __RPC_STUB IInternetBindInfo_GetBindString_Stub(
 
 #ifndef __IInternetPriority_FWD_DEFINED__
 #define __IInternetPriority_FWD_DEFINED__
-typedef struct IInternetPriority IInternetPriority;
+typedef interface IInternetPriority IInternetPriority;
 #endif
 
 typedef IInternetPriority *LPIINTERNETPRIORITY;
@@ -1551,7 +1544,7 @@ typedef IInternetPriority *LPIINTERNETPRIORITY;
 
 DEFINE_GUID(IID_IInternetPriority, 0x79eac9eb, 0xbaf9, 0x11ce, 0x8c,0x82, 0x00,0xaa,0x00,0x4b,0xa9,0x0b);
 #if defined(__cplusplus) && !defined(CINTERFACE)
-struct IInternetPriority : public IUnknown
+interface IInternetPriority : public IUnknown
 {
     virtual HRESULT STDMETHODCALLTYPE SetPriority(
         LONG nPriority) = 0;
@@ -1561,11 +1554,7 @@ struct IInternetPriority : public IUnknown
 
 };
 #else
-typedef struct IInternetPriorityVtbl IInternetPriorityVtbl;
-struct IInternetPriority {
-    const IInternetPriorityVtbl* lpVtbl;
-};
-struct IInternetPriorityVtbl {
+typedef struct IInternetPriorityVtbl {
     BEGIN_INTERFACE
 
     /*** IUnknown methods ***/
@@ -1590,6 +1579,9 @@ struct IInternetPriorityVtbl {
         LONG* pnPriority);
 
     END_INTERFACE
+} IInternetPriorityVtbl;
+interface IInternetPriority {
+    const IInternetPriorityVtbl* lpVtbl;
 };
 
 #ifdef COBJMACROS
@@ -1608,16 +1600,16 @@ HRESULT CALLBACK IInternetPriority_SetPriority_Proxy(
     IInternetPriority* This,
     LONG nPriority);
 void __RPC_STUB IInternetPriority_SetPriority_Stub(
-    struct IRpcStubBuffer* This,
-    struct IRpcChannelBuffer* pRpcChannelBuffer,
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
     PRPC_MESSAGE pRpcMessage,
     DWORD* pdwStubPhase);
 HRESULT CALLBACK IInternetPriority_GetPriority_Proxy(
     IInternetPriority* This,
     LONG* pnPriority);
 void __RPC_STUB IInternetPriority_GetPriority_Stub(
-    struct IRpcStubBuffer* This,
-    struct IRpcChannelBuffer* pRpcChannelBuffer,
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
     PRPC_MESSAGE pRpcMessage,
     DWORD* pdwStubPhase);
 
@@ -1625,7 +1617,7 @@ void __RPC_STUB IInternetPriority_GetPriority_Stub(
 
 #ifndef __IInternetProtocolRoot_FWD_DEFINED__
 #define __IInternetProtocolRoot_FWD_DEFINED__
-typedef struct IInternetProtocolRoot IInternetProtocolRoot;
+typedef interface IInternetProtocolRoot IInternetProtocolRoot;
 #endif
 
 typedef IInternetProtocolRoot *LPIINTERNETPROTOCOLROOT;
@@ -1656,7 +1648,7 @@ typedef struct _tagPROTOCOLDATA {
 
 DEFINE_GUID(IID_IInternetProtocolRoot, 0x79eac9e3, 0xbaf9, 0x11ce, 0x8c,0x82, 0x00,0xaa,0x00,0x4b,0xa9,0x0b);
 #if defined(__cplusplus) && !defined(CINTERFACE)
-struct IInternetProtocolRoot : public IUnknown
+interface IInternetProtocolRoot : public IUnknown
 {
     virtual HRESULT STDMETHODCALLTYPE Start(
         LPCWSTR szUrl,
@@ -1683,11 +1675,7 @@ struct IInternetProtocolRoot : public IUnknown
 
 };
 #else
-typedef struct IInternetProtocolRootVtbl IInternetProtocolRootVtbl;
-struct IInternetProtocolRoot {
-    const IInternetProtocolRootVtbl* lpVtbl;
-};
-struct IInternetProtocolRootVtbl {
+typedef struct IInternetProtocolRootVtbl {
     BEGIN_INTERFACE
 
     /*** IUnknown methods ***/
@@ -1731,6 +1719,9 @@ struct IInternetProtocolRootVtbl {
         IInternetProtocolRoot* This);
 
     END_INTERFACE
+} IInternetProtocolRootVtbl;
+interface IInternetProtocolRoot {
+    const IInternetProtocolRootVtbl* lpVtbl;
 };
 
 #ifdef COBJMACROS
@@ -1757,16 +1748,16 @@ HRESULT CALLBACK IInternetProtocolRoot_Start_Proxy(
     DWORD grfPI,
     DWORD dwReserved);
 void __RPC_STUB IInternetProtocolRoot_Start_Stub(
-    struct IRpcStubBuffer* This,
-    struct IRpcChannelBuffer* pRpcChannelBuffer,
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
     PRPC_MESSAGE pRpcMessage,
     DWORD* pdwStubPhase);
 HRESULT CALLBACK IInternetProtocolRoot_Continue_Proxy(
     IInternetProtocolRoot* This,
     PROTOCOLDATA* pProtocolData);
 void __RPC_STUB IInternetProtocolRoot_Continue_Stub(
-    struct IRpcStubBuffer* This,
-    struct IRpcChannelBuffer* pRpcChannelBuffer,
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
     PRPC_MESSAGE pRpcMessage,
     DWORD* pdwStubPhase);
 HRESULT CALLBACK IInternetProtocolRoot_Abort_Proxy(
@@ -1774,30 +1765,30 @@ HRESULT CALLBACK IInternetProtocolRoot_Abort_Proxy(
     HRESULT hrReason,
     DWORD dwOptions);
 void __RPC_STUB IInternetProtocolRoot_Abort_Stub(
-    struct IRpcStubBuffer* This,
-    struct IRpcChannelBuffer* pRpcChannelBuffer,
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
     PRPC_MESSAGE pRpcMessage,
     DWORD* pdwStubPhase);
 HRESULT CALLBACK IInternetProtocolRoot_Terminate_Proxy(
     IInternetProtocolRoot* This,
     DWORD dwOptions);
 void __RPC_STUB IInternetProtocolRoot_Terminate_Stub(
-    struct IRpcStubBuffer* This,
-    struct IRpcChannelBuffer* pRpcChannelBuffer,
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
     PRPC_MESSAGE pRpcMessage,
     DWORD* pdwStubPhase);
 HRESULT CALLBACK IInternetProtocolRoot_Suspend_Proxy(
     IInternetProtocolRoot* This);
 void __RPC_STUB IInternetProtocolRoot_Suspend_Stub(
-    struct IRpcStubBuffer* This,
-    struct IRpcChannelBuffer* pRpcChannelBuffer,
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
     PRPC_MESSAGE pRpcMessage,
     DWORD* pdwStubPhase);
 HRESULT CALLBACK IInternetProtocolRoot_Resume_Proxy(
     IInternetProtocolRoot* This);
 void __RPC_STUB IInternetProtocolRoot_Resume_Stub(
-    struct IRpcStubBuffer* This,
-    struct IRpcChannelBuffer* pRpcChannelBuffer,
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
     PRPC_MESSAGE pRpcMessage,
     DWORD* pdwStubPhase);
 
@@ -1812,7 +1803,7 @@ typedef IInternetProtocolSink *LPIINTERNETPROTOCOLSINK;
 
 DEFINE_GUID(IID_IInternetProtocolSink, 0x79eac9e5, 0xbaf9, 0x11ce, 0x8c,0x82, 0x00,0xaa,0x00,0x4b,0xa9,0x0b);
 #if defined(__cplusplus) && !defined(CINTERFACE)
-struct IInternetProtocolSink : public IUnknown
+interface IInternetProtocolSink : public IUnknown
 {
     virtual HRESULT STDMETHODCALLTYPE Switch(
         PROTOCOLDATA* pProtocolData) = 0;
@@ -1833,11 +1824,7 @@ struct IInternetProtocolSink : public IUnknown
 
 };
 #else
-typedef struct IInternetProtocolSinkVtbl IInternetProtocolSinkVtbl;
-struct IInternetProtocolSink {
-    const IInternetProtocolSinkVtbl* lpVtbl;
-};
-struct IInternetProtocolSinkVtbl {
+typedef struct IInternetProtocolSinkVtbl {
     BEGIN_INTERFACE
 
     /*** IUnknown methods ***/
@@ -1875,6 +1862,9 @@ struct IInternetProtocolSinkVtbl {
         LPCWSTR szResult);
 
     END_INTERFACE
+} IInternetProtocolSinkVtbl;
+interface IInternetProtocolSink {
+    const IInternetProtocolSinkVtbl* lpVtbl;
 };
 
 #ifdef COBJMACROS
@@ -1895,8 +1885,8 @@ HRESULT CALLBACK IInternetProtocolSink_Switch_Proxy(
     IInternetProtocolSink* This,
     PROTOCOLDATA* pProtocolData);
 void __RPC_STUB IInternetProtocolSink_Switch_Stub(
-    struct IRpcStubBuffer* This,
-    struct IRpcChannelBuffer* pRpcChannelBuffer,
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
     PRPC_MESSAGE pRpcMessage,
     DWORD* pdwStubPhase);
 HRESULT CALLBACK IInternetProtocolSink_ReportProgress_Proxy(
@@ -1904,8 +1894,8 @@ HRESULT CALLBACK IInternetProtocolSink_ReportProgress_Proxy(
     ULONG ulStatusCode,
     LPCWSTR szStatusText);
 void __RPC_STUB IInternetProtocolSink_ReportProgress_Stub(
-    struct IRpcStubBuffer* This,
-    struct IRpcChannelBuffer* pRpcChannelBuffer,
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
     PRPC_MESSAGE pRpcMessage,
     DWORD* pdwStubPhase);
 HRESULT CALLBACK IInternetProtocolSink_ReportData_Proxy(
@@ -1914,8 +1904,8 @@ HRESULT CALLBACK IInternetProtocolSink_ReportData_Proxy(
     ULONG ulProgress,
     ULONG ulProgressMax);
 void __RPC_STUB IInternetProtocolSink_ReportData_Stub(
-    struct IRpcStubBuffer* This,
-    struct IRpcChannelBuffer* pRpcChannelBuffer,
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
     PRPC_MESSAGE pRpcMessage,
     DWORD* pdwStubPhase);
 HRESULT CALLBACK IInternetProtocolSink_ReportResult_Proxy(
@@ -1924,8 +1914,8 @@ HRESULT CALLBACK IInternetProtocolSink_ReportResult_Proxy(
     DWORD dwError,
     LPCWSTR szResult);
 void __RPC_STUB IInternetProtocolSink_ReportResult_Stub(
-    struct IRpcStubBuffer* This,
-    struct IRpcChannelBuffer* pRpcChannelBuffer,
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
     PRPC_MESSAGE pRpcMessage,
     DWORD* pdwStubPhase);
 
@@ -1933,7 +1923,7 @@ void __RPC_STUB IInternetProtocolSink_ReportResult_Stub(
 
 #ifndef __IInternetProtocol_FWD_DEFINED__
 #define __IInternetProtocol_FWD_DEFINED__
-typedef struct IInternetProtocol IInternetProtocol;
+typedef interface IInternetProtocol IInternetProtocol;
 #endif
 
 typedef IInternetProtocol *LPIINTERNETPROTOCOL;
@@ -1945,7 +1935,7 @@ typedef IInternetProtocol *LPIINTERNETPROTOCOL;
 
 DEFINE_GUID(IID_IInternetProtocol, 0x79eac9e4, 0xbaf9, 0x11ce, 0x8c,0x82, 0x00,0xaa,0x00,0x4b,0xa9,0x0b);
 #if defined(__cplusplus) && !defined(CINTERFACE)
-struct IInternetProtocol : public IInternetProtocolRoot
+interface IInternetProtocol : public IInternetProtocolRoot
 {
     virtual HRESULT STDMETHODCALLTYPE Read(
         void* pv,
@@ -1965,11 +1955,7 @@ struct IInternetProtocol : public IInternetProtocolRoot
 
 };
 #else
-typedef struct IInternetProtocolVtbl IInternetProtocolVtbl;
-struct IInternetProtocol {
-    const IInternetProtocolVtbl* lpVtbl;
-};
-struct IInternetProtocolVtbl {
+typedef struct IInternetProtocolVtbl {
     BEGIN_INTERFACE
 
     /*** IUnknown methods ***/
@@ -2033,6 +2019,9 @@ struct IInternetProtocolVtbl {
         IInternetProtocol* This);
 
     END_INTERFACE
+} IInternetProtocolVtbl;
+interface IInternetProtocol {
+    const IInternetProtocolVtbl* lpVtbl;
 };
 
 #ifdef COBJMACROS
@@ -2062,8 +2051,8 @@ HRESULT CALLBACK IInternetProtocol_Read_Proxy(
     ULONG cb,
     ULONG* pcbRead);
 void __RPC_STUB IInternetProtocol_Read_Stub(
-    struct IRpcStubBuffer* This,
-    struct IRpcChannelBuffer* pRpcChannelBuffer,
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
     PRPC_MESSAGE pRpcMessage,
     DWORD* pdwStubPhase);
 HRESULT CALLBACK IInternetProtocol_Seek_Proxy(
@@ -2072,23 +2061,23 @@ HRESULT CALLBACK IInternetProtocol_Seek_Proxy(
     DWORD dwOrigin,
     ULARGE_INTEGER* plibNewPosition);
 void __RPC_STUB IInternetProtocol_Seek_Stub(
-    struct IRpcStubBuffer* This,
-    struct IRpcChannelBuffer* pRpcChannelBuffer,
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
     PRPC_MESSAGE pRpcMessage,
     DWORD* pdwStubPhase);
 HRESULT CALLBACK IInternetProtocol_LockRequest_Proxy(
     IInternetProtocol* This,
     DWORD dwOptions);
 void __RPC_STUB IInternetProtocol_LockRequest_Stub(
-    struct IRpcStubBuffer* This,
-    struct IRpcChannelBuffer* pRpcChannelBuffer,
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
     PRPC_MESSAGE pRpcMessage,
     DWORD* pdwStubPhase);
 HRESULT CALLBACK IInternetProtocol_UnlockRequest_Proxy(
     IInternetProtocol* This);
 void __RPC_STUB IInternetProtocol_UnlockRequest_Stub(
-    struct IRpcStubBuffer* This,
-    struct IRpcChannelBuffer* pRpcChannelBuffer,
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
     PRPC_MESSAGE pRpcMessage,
     DWORD* pdwStubPhase);
 
@@ -2096,7 +2085,7 @@ void __RPC_STUB IInternetProtocol_UnlockRequest_Stub(
 
 #ifndef __IInternetProtocolInfo_FWD_DEFINED__
 #define __IInternetProtocolInfo_FWD_DEFINED__
-typedef struct IInternetProtocolInfo IInternetProtocolInfo;
+typedef interface IInternetProtocolInfo IInternetProtocolInfo;
 #endif
 
 typedef IInternetProtocolInfo *LPIINTERNETPROTOCOLINFO;
@@ -2149,7 +2138,7 @@ typedef enum _tagQUERYOPTION {
 
 DEFINE_GUID(IID_IInternetProtocolInfo, 0x79eac9ec, 0xbaf9, 0x11ce, 0x8c,0x82, 0x00,0xaa,0x00,0x4b,0xa9,0x0b);
 #if defined(__cplusplus) && !defined(CINTERFACE)
-struct IInternetProtocolInfo : public IUnknown
+interface IInternetProtocolInfo : public IUnknown
 {
     virtual HRESULT STDMETHODCALLTYPE ParseUrl(
         LPCWSTR pwzUrl,
@@ -2185,11 +2174,7 @@ struct IInternetProtocolInfo : public IUnknown
 
 };
 #else
-typedef struct IInternetProtocolInfoVtbl IInternetProtocolInfoVtbl;
-struct IInternetProtocolInfo {
-    const IInternetProtocolInfoVtbl* lpVtbl;
-};
-struct IInternetProtocolInfoVtbl {
+typedef struct IInternetProtocolInfoVtbl {
     BEGIN_INTERFACE
 
     /*** IUnknown methods ***/
@@ -2242,6 +2227,9 @@ struct IInternetProtocolInfoVtbl {
         DWORD dwReserved);
 
     END_INTERFACE
+} IInternetProtocolInfoVtbl;
+interface IInternetProtocolInfo {
+    const IInternetProtocolInfoVtbl* lpVtbl;
 };
 
 #ifdef COBJMACROS
@@ -2268,8 +2256,8 @@ HRESULT CALLBACK IInternetProtocolInfo_ParseUrl_Proxy(
     DWORD* pcchResult,
     DWORD dwReserved);
 void __RPC_STUB IInternetProtocolInfo_ParseUrl_Stub(
-    struct IRpcStubBuffer* This,
-    struct IRpcChannelBuffer* pRpcChannelBuffer,
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
     PRPC_MESSAGE pRpcMessage,
     DWORD* pdwStubPhase);
 HRESULT CALLBACK IInternetProtocolInfo_CombineUrl_Proxy(
@@ -2282,8 +2270,8 @@ HRESULT CALLBACK IInternetProtocolInfo_CombineUrl_Proxy(
     DWORD* pcchResult,
     DWORD dwReserved);
 void __RPC_STUB IInternetProtocolInfo_CombineUrl_Stub(
-    struct IRpcStubBuffer* This,
-    struct IRpcChannelBuffer* pRpcChannelBuffer,
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
     PRPC_MESSAGE pRpcMessage,
     DWORD* pdwStubPhase);
 HRESULT CALLBACK IInternetProtocolInfo_CompareUrl_Proxy(
@@ -2292,8 +2280,8 @@ HRESULT CALLBACK IInternetProtocolInfo_CompareUrl_Proxy(
     LPCWSTR pwzUrl2,
     DWORD dwCompareFlags);
 void __RPC_STUB IInternetProtocolInfo_CompareUrl_Stub(
-    struct IRpcStubBuffer* This,
-    struct IRpcChannelBuffer* pRpcChannelBuffer,
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
     PRPC_MESSAGE pRpcMessage,
     DWORD* pdwStubPhase);
 HRESULT CALLBACK IInternetProtocolInfo_QueryInfo_Proxy(
@@ -2306,8 +2294,8 @@ HRESULT CALLBACK IInternetProtocolInfo_QueryInfo_Proxy(
     DWORD* pcbBuf,
     DWORD dwReserved);
 void __RPC_STUB IInternetProtocolInfo_QueryInfo_Stub(
-    struct IRpcStubBuffer* This,
-    struct IRpcChannelBuffer* pRpcChannelBuffer,
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
     PRPC_MESSAGE pRpcMessage,
     DWORD* pdwStubPhase);
 
@@ -2315,7 +2303,7 @@ void __RPC_STUB IInternetProtocolInfo_QueryInfo_Stub(
 
 #ifndef __IInternetSession_FWD_DEFINED__
 #define __IInternetSession_FWD_DEFINED__
-typedef struct IInternetSession IInternetSession;
+typedef interface IInternetSession IInternetSession;
 #endif
 
 typedef IInternetSession *LPIINTERNETSESSION;
@@ -2331,7 +2319,7 @@ typedef enum _tagOIBDG_FLAGS {
 
 DEFINE_GUID(IID_IInternetSession, 0x79eac9e7, 0xbaf9, 0x11ce, 0x8c,0x82, 0x00,0xaa,0x00,0x4b,0xa9,0x0b);
 #if defined(__cplusplus) && !defined(CINTERFACE)
-struct IInternetSession : public IUnknown
+interface IInternetSession : public IUnknown
 {
     virtual HRESULT STDMETHODCALLTYPE RegisterNameSpace(
         IClassFactory* pCF,
@@ -2370,11 +2358,7 @@ struct IInternetSession : public IUnknown
 
 };
 #else
-typedef struct IInternetSessionVtbl IInternetSessionVtbl;
-struct IInternetSession {
-    const IInternetSessionVtbl* lpVtbl;
-};
-struct IInternetSessionVtbl {
+typedef struct IInternetSessionVtbl {
     BEGIN_INTERFACE
 
     /*** IUnknown methods ***/
@@ -2432,6 +2416,9 @@ struct IInternetSessionVtbl {
         DWORD dwReserved);
 
     END_INTERFACE
+} IInternetSessionVtbl;
+interface IInternetSession {
+    const IInternetSessionVtbl* lpVtbl;
 };
 
 #ifdef COBJMACROS
@@ -2459,8 +2446,8 @@ HRESULT CALLBACK IInternetSession_RegisterNameSpace_Proxy(
     const LPCWSTR* ppwzPatterns,
     DWORD dwReserved);
 void __RPC_STUB IInternetSession_RegisterNameSpace_Stub(
-    struct IRpcStubBuffer* This,
-    struct IRpcChannelBuffer* pRpcChannelBuffer,
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
     PRPC_MESSAGE pRpcMessage,
     DWORD* pdwStubPhase);
 HRESULT CALLBACK IInternetSession_UnregisterNameSpace_Proxy(
@@ -2468,8 +2455,8 @@ HRESULT CALLBACK IInternetSession_UnregisterNameSpace_Proxy(
     IClassFactory* pCF,
     LPCWSTR pszProtocol);
 void __RPC_STUB IInternetSession_UnregisterNameSpace_Stub(
-    struct IRpcStubBuffer* This,
-    struct IRpcChannelBuffer* pRpcChannelBuffer,
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
     PRPC_MESSAGE pRpcMessage,
     DWORD* pdwStubPhase);
 HRESULT CALLBACK IInternetSession_RegisterMimeFilter_Proxy(
@@ -2478,8 +2465,8 @@ HRESULT CALLBACK IInternetSession_RegisterMimeFilter_Proxy(
     REFCLSID rclsid,
     LPCWSTR pwzType);
 void __RPC_STUB IInternetSession_RegisterMimeFilter_Stub(
-    struct IRpcStubBuffer* This,
-    struct IRpcChannelBuffer* pRpcChannelBuffer,
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
     PRPC_MESSAGE pRpcMessage,
     DWORD* pdwStubPhase);
 HRESULT CALLBACK IInternetSession_UnregisterMimeFilter_Proxy(
@@ -2487,8 +2474,8 @@ HRESULT CALLBACK IInternetSession_UnregisterMimeFilter_Proxy(
     IClassFactory* pCF,
     LPCWSTR pwzType);
 void __RPC_STUB IInternetSession_UnregisterMimeFilter_Stub(
-    struct IRpcStubBuffer* This,
-    struct IRpcChannelBuffer* pRpcChannelBuffer,
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
     PRPC_MESSAGE pRpcMessage,
     DWORD* pdwStubPhase);
 HRESULT CALLBACK IInternetSession_CreateBinding_Proxy(
@@ -2500,8 +2487,8 @@ HRESULT CALLBACK IInternetSession_CreateBinding_Proxy(
     IInternetProtocol** ppOInetProt,
     DWORD dwOption);
 void __RPC_STUB IInternetSession_CreateBinding_Stub(
-    struct IRpcStubBuffer* This,
-    struct IRpcChannelBuffer* pRpcChannelBuffer,
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
     PRPC_MESSAGE pRpcMessage,
     DWORD* pdwStubPhase);
 HRESULT CALLBACK IInternetSession_SetSessionOption_Proxy(
@@ -2511,8 +2498,8 @@ HRESULT CALLBACK IInternetSession_SetSessionOption_Proxy(
     DWORD dwBufferLength,
     DWORD dwReserved);
 void __RPC_STUB IInternetSession_SetSessionOption_Stub(
-    struct IRpcStubBuffer* This,
-    struct IRpcChannelBuffer* pRpcChannelBuffer,
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
     PRPC_MESSAGE pRpcMessage,
     DWORD* pdwStubPhase);
 
@@ -2520,7 +2507,7 @@ void __RPC_STUB IInternetSession_SetSessionOption_Stub(
 
 #ifndef __IInternetSecurityMgrSite_FWD_DEFINED__
 #define __IInternetSecurityMgrSite_FWD_DEFINED__
-typedef struct IInternetSecurityMgrSite IInternetSecurityMgrSite;
+typedef interface IInternetSecurityMgrSite IInternetSecurityMgrSite;
 #endif
 
 /*****************************************************************************
@@ -2531,7 +2518,7 @@ typedef struct IInternetSecurityMgrSite IInternetSecurityMgrSite;
 
 DEFINE_GUID(IID_IInternetSecurityMgrSite, 0x79eac9ed, 0xbaf9, 0x11ce, 0x8c,0x82, 0x00,0xaa,0x00,0x4b,0xa9,0x0b);
 #if defined(__cplusplus) && !defined(CINTERFACE)
-struct IInternetSecurityMgrSite : public IUnknown
+interface IInternetSecurityMgrSite : public IUnknown
 {
     virtual HRESULT STDMETHODCALLTYPE GetWindow(
         HWND* phwnd) = 0;
@@ -2541,11 +2528,7 @@ struct IInternetSecurityMgrSite : public IUnknown
 
 };
 #else
-typedef struct IInternetSecurityMgrSiteVtbl IInternetSecurityMgrSiteVtbl;
-struct IInternetSecurityMgrSite {
-    const IInternetSecurityMgrSiteVtbl* lpVtbl;
-};
-struct IInternetSecurityMgrSiteVtbl {
+typedef struct IInternetSecurityMgrSiteVtbl {
     BEGIN_INTERFACE
 
     /*** IUnknown methods ***/
@@ -2570,6 +2553,9 @@ struct IInternetSecurityMgrSiteVtbl {
         BOOL fEnable);
 
     END_INTERFACE
+} IInternetSecurityMgrSiteVtbl;
+interface IInternetSecurityMgrSite {
+    const IInternetSecurityMgrSiteVtbl* lpVtbl;
 };
 
 #ifdef COBJMACROS
@@ -2588,16 +2574,16 @@ HRESULT CALLBACK IInternetSecurityMgrSite_GetWindow_Proxy(
     IInternetSecurityMgrSite* This,
     HWND* phwnd);
 void __RPC_STUB IInternetSecurityMgrSite_GetWindow_Stub(
-    struct IRpcStubBuffer* This,
-    struct IRpcChannelBuffer* pRpcChannelBuffer,
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
     PRPC_MESSAGE pRpcMessage,
     DWORD* pdwStubPhase);
 HRESULT CALLBACK IInternetSecurityMgrSite_EnableModeless_Proxy(
     IInternetSecurityMgrSite* This,
     BOOL fEnable);
 void __RPC_STUB IInternetSecurityMgrSite_EnableModeless_Stub(
-    struct IRpcStubBuffer* This,
-    struct IRpcChannelBuffer* pRpcChannelBuffer,
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
     PRPC_MESSAGE pRpcMessage,
     DWORD* pdwStubPhase);
 
@@ -2606,7 +2592,7 @@ void __RPC_STUB IInternetSecurityMgrSite_EnableModeless_Stub(
 #define SID_SInternetSecurityManager IID_IInternetSecurityManager
 #ifndef __IInternetSecurityManager_FWD_DEFINED__
 #define __IInternetSecurityManager_FWD_DEFINED__
-typedef struct IInternetSecurityManager IInternetSecurityManager;
+typedef interface IInternetSecurityManager IInternetSecurityManager;
 #endif
 
 #define MAX_SIZE_SECURITY_ID 512
@@ -2630,7 +2616,7 @@ typedef enum {
 
 DEFINE_GUID(IID_IInternetSecurityManager, 0x79eac9ee, 0xbaf9, 0x11ce, 0x8c,0x82, 0x00,0xaa,0x00,0x4b,0xa9,0x0b);
 #if defined(__cplusplus) && !defined(CINTERFACE)
-struct IInternetSecurityManager : public IUnknown
+interface IInternetSecurityManager : public IUnknown
 {
     virtual HRESULT STDMETHODCALLTYPE SetSecuritySite(
         IInternetSecurityMgrSite* pSite) = 0;
@@ -2680,11 +2666,7 @@ struct IInternetSecurityManager : public IUnknown
 
 };
 #else
-typedef struct IInternetSecurityManagerVtbl IInternetSecurityManagerVtbl;
-struct IInternetSecurityManager {
-    const IInternetSecurityManagerVtbl* lpVtbl;
-};
-struct IInternetSecurityManagerVtbl {
+typedef struct IInternetSecurityManagerVtbl {
     BEGIN_INTERFACE
 
     /*** IUnknown methods ***/
@@ -2755,6 +2737,9 @@ struct IInternetSecurityManagerVtbl {
         DWORD dwFlags);
 
     END_INTERFACE
+} IInternetSecurityManagerVtbl;
+interface IInternetSecurityManager {
+    const IInternetSecurityManagerVtbl* lpVtbl;
 };
 
 #ifdef COBJMACROS
@@ -2779,16 +2764,16 @@ HRESULT CALLBACK IInternetSecurityManager_SetSecuritySite_Proxy(
     IInternetSecurityManager* This,
     IInternetSecurityMgrSite* pSite);
 void __RPC_STUB IInternetSecurityManager_SetSecuritySite_Stub(
-    struct IRpcStubBuffer* This,
-    struct IRpcChannelBuffer* pRpcChannelBuffer,
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
     PRPC_MESSAGE pRpcMessage,
     DWORD* pdwStubPhase);
 HRESULT CALLBACK IInternetSecurityManager_GetSecuritySite_Proxy(
     IInternetSecurityManager* This,
     IInternetSecurityMgrSite** ppSite);
 void __RPC_STUB IInternetSecurityManager_GetSecuritySite_Stub(
-    struct IRpcStubBuffer* This,
-    struct IRpcChannelBuffer* pRpcChannelBuffer,
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
     PRPC_MESSAGE pRpcMessage,
     DWORD* pdwStubPhase);
 HRESULT CALLBACK IInternetSecurityManager_MapUrlToZone_Proxy(
@@ -2797,8 +2782,8 @@ HRESULT CALLBACK IInternetSecurityManager_MapUrlToZone_Proxy(
     DWORD* pdwZone,
     DWORD dwFlags);
 void __RPC_STUB IInternetSecurityManager_MapUrlToZone_Stub(
-    struct IRpcStubBuffer* This,
-    struct IRpcChannelBuffer* pRpcChannelBuffer,
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
     PRPC_MESSAGE pRpcMessage,
     DWORD* pdwStubPhase);
 HRESULT CALLBACK IInternetSecurityManager_GetSecurityId_Proxy(
@@ -2808,8 +2793,8 @@ HRESULT CALLBACK IInternetSecurityManager_GetSecurityId_Proxy(
     DWORD* pcbSecurityId,
     DWORD_PTR dwReserved);
 void __RPC_STUB IInternetSecurityManager_GetSecurityId_Stub(
-    struct IRpcStubBuffer* This,
-    struct IRpcChannelBuffer* pRpcChannelBuffer,
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
     PRPC_MESSAGE pRpcMessage,
     DWORD* pdwStubPhase);
 HRESULT CALLBACK IInternetSecurityManager_ProcessUrlAction_Proxy(
@@ -2823,8 +2808,8 @@ HRESULT CALLBACK IInternetSecurityManager_ProcessUrlAction_Proxy(
     DWORD dwFlags,
     DWORD dwReserved);
 void __RPC_STUB IInternetSecurityManager_ProcessUrlAction_Stub(
-    struct IRpcStubBuffer* This,
-    struct IRpcChannelBuffer* pRpcChannelBuffer,
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
     PRPC_MESSAGE pRpcMessage,
     DWORD* pdwStubPhase);
 HRESULT CALLBACK IInternetSecurityManager_QueryCustomPolicy_Proxy(
@@ -2837,8 +2822,8 @@ HRESULT CALLBACK IInternetSecurityManager_QueryCustomPolicy_Proxy(
     DWORD cbContext,
     DWORD dwReserved);
 void __RPC_STUB IInternetSecurityManager_QueryCustomPolicy_Stub(
-    struct IRpcStubBuffer* This,
-    struct IRpcChannelBuffer* pRpcChannelBuffer,
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
     PRPC_MESSAGE pRpcMessage,
     DWORD* pdwStubPhase);
 HRESULT CALLBACK IInternetSecurityManager_SetZoneMapping_Proxy(
@@ -2847,8 +2832,8 @@ HRESULT CALLBACK IInternetSecurityManager_SetZoneMapping_Proxy(
     LPCWSTR lpszPattern,
     DWORD dwFlags);
 void __RPC_STUB IInternetSecurityManager_SetZoneMapping_Stub(
-    struct IRpcStubBuffer* This,
-    struct IRpcChannelBuffer* pRpcChannelBuffer,
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
     PRPC_MESSAGE pRpcMessage,
     DWORD* pdwStubPhase);
 HRESULT CALLBACK IInternetSecurityManager_GetZoneMappings_Proxy(
@@ -2857,8 +2842,8 @@ HRESULT CALLBACK IInternetSecurityManager_GetZoneMappings_Proxy(
     IEnumString** ppenumString,
     DWORD dwFlags);
 void __RPC_STUB IInternetSecurityManager_GetZoneMappings_Stub(
-    struct IRpcStubBuffer* This,
-    struct IRpcChannelBuffer* pRpcChannelBuffer,
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
     PRPC_MESSAGE pRpcMessage,
     DWORD* pdwStubPhase);
 
@@ -2866,7 +2851,7 @@ void __RPC_STUB IInternetSecurityManager_GetZoneMappings_Stub(
 
 #ifndef __IInternetZoneManager_FWD_DEFINED__
 #define __IInternetZoneManager_FWD_DEFINED__
-typedef struct IInternetZoneManager IInternetZoneManager;
+typedef interface IInternetZoneManager IInternetZoneManager;
 #endif
 
 typedef IInternetZoneManager *LPURLZONEMANAGER;
@@ -2927,7 +2912,7 @@ typedef enum _URLZONEREG {
 
 DEFINE_GUID(IID_IInternetZoneManager, 0x79eac9ef, 0xbaf9, 0x11ce, 0x8c,0x82, 0x00,0xaa,0x00,0x4b,0xa9,0x0b);
 #if defined(__cplusplus) && !defined(CINTERFACE)
-struct IInternetZoneManager : public IUnknown
+interface IInternetZoneManager : public IUnknown
 {
     virtual HRESULT STDMETHODCALLTYPE GetZoneAttributes(
         DWORD dwZone,
@@ -2998,11 +2983,7 @@ struct IInternetZoneManager : public IUnknown
 
 };
 #else
-typedef struct IInternetZoneManagerVtbl IInternetZoneManagerVtbl;
-struct IInternetZoneManager {
-    const IInternetZoneManagerVtbl* lpVtbl;
-};
-struct IInternetZoneManagerVtbl {
+typedef struct IInternetZoneManagerVtbl {
     BEGIN_INTERFACE
 
     /*** IUnknown methods ***/
@@ -3098,6 +3079,9 @@ struct IInternetZoneManagerVtbl {
         DWORD dwReserved);
 
     END_INTERFACE
+} IInternetZoneManagerVtbl;
+interface IInternetZoneManager {
+    const IInternetZoneManagerVtbl* lpVtbl;
 };
 
 #ifdef COBJMACROS
@@ -3127,8 +3111,8 @@ HRESULT CALLBACK IInternetZoneManager_GetZoneAttributes_Proxy(
     DWORD dwZone,
     ZONEATTRIBUTES* pZoneAttributes);
 void __RPC_STUB IInternetZoneManager_GetZoneAttributes_Stub(
-    struct IRpcStubBuffer* This,
-    struct IRpcChannelBuffer* pRpcChannelBuffer,
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
     PRPC_MESSAGE pRpcMessage,
     DWORD* pdwStubPhase);
 HRESULT CALLBACK IInternetZoneManager_SetZoneAttributes_Proxy(
@@ -3136,8 +3120,8 @@ HRESULT CALLBACK IInternetZoneManager_SetZoneAttributes_Proxy(
     DWORD dwZone,
     ZONEATTRIBUTES* pZoneAttributes);
 void __RPC_STUB IInternetZoneManager_SetZoneAttributes_Stub(
-    struct IRpcStubBuffer* This,
-    struct IRpcChannelBuffer* pRpcChannelBuffer,
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
     PRPC_MESSAGE pRpcMessage,
     DWORD* pdwStubPhase);
 HRESULT CALLBACK IInternetZoneManager_GetZoneCustomPolicy_Proxy(
@@ -3148,8 +3132,8 @@ HRESULT CALLBACK IInternetZoneManager_GetZoneCustomPolicy_Proxy(
     DWORD* pcbPolicy,
     URLZONEREG ulrZoneReg);
 void __RPC_STUB IInternetZoneManager_GetZoneCustomPolicy_Stub(
-    struct IRpcStubBuffer* This,
-    struct IRpcChannelBuffer* pRpcChannelBuffer,
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
     PRPC_MESSAGE pRpcMessage,
     DWORD* pdwStubPhase);
 HRESULT CALLBACK IInternetZoneManager_SetZoneCustomPolicy_Proxy(
@@ -3160,8 +3144,8 @@ HRESULT CALLBACK IInternetZoneManager_SetZoneCustomPolicy_Proxy(
     DWORD pcbPolicy,
     URLZONEREG ulrZoneReg);
 void __RPC_STUB IInternetZoneManager_SetZoneCustomPolicy_Stub(
-    struct IRpcStubBuffer* This,
-    struct IRpcChannelBuffer* pRpcChannelBuffer,
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
     PRPC_MESSAGE pRpcMessage,
     DWORD* pdwStubPhase);
 HRESULT CALLBACK IInternetZoneManager_GetZoneActionPolicy_Proxy(
@@ -3172,8 +3156,8 @@ HRESULT CALLBACK IInternetZoneManager_GetZoneActionPolicy_Proxy(
     DWORD cbPolicy,
     URLZONEREG urlZoneReg);
 void __RPC_STUB IInternetZoneManager_GetZoneActionPolicy_Stub(
-    struct IRpcStubBuffer* This,
-    struct IRpcChannelBuffer* pRpcChannelBuffer,
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
     PRPC_MESSAGE pRpcMessage,
     DWORD* pdwStubPhase);
 HRESULT CALLBACK IInternetZoneManager_SetZoneActionPolicy_Proxy(
@@ -3184,8 +3168,8 @@ HRESULT CALLBACK IInternetZoneManager_SetZoneActionPolicy_Proxy(
     DWORD cbPolicy,
     URLZONEREG urlZoneReg);
 void __RPC_STUB IInternetZoneManager_SetZoneActionPolicy_Stub(
-    struct IRpcStubBuffer* This,
-    struct IRpcChannelBuffer* pRpcChannelBuffer,
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
     PRPC_MESSAGE pRpcMessage,
     DWORD* pdwStubPhase);
 HRESULT CALLBACK IInternetZoneManager_PromptAction_Proxy(
@@ -3196,8 +3180,8 @@ HRESULT CALLBACK IInternetZoneManager_PromptAction_Proxy(
     LPCWSTR pwszText,
     DWORD dwPromptFlags);
 void __RPC_STUB IInternetZoneManager_PromptAction_Stub(
-    struct IRpcStubBuffer* This,
-    struct IRpcChannelBuffer* pRpcChannelBuffer,
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
     PRPC_MESSAGE pRpcMessage,
     DWORD* pdwStubPhase);
 HRESULT CALLBACK IInternetZoneManager_LogAction_Proxy(
@@ -3207,8 +3191,8 @@ HRESULT CALLBACK IInternetZoneManager_LogAction_Proxy(
     LPCWSTR pwszText,
     DWORD dwLogFlags);
 void __RPC_STUB IInternetZoneManager_LogAction_Stub(
-    struct IRpcStubBuffer* This,
-    struct IRpcChannelBuffer* pRpcChannelBuffer,
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
     PRPC_MESSAGE pRpcMessage,
     DWORD* pdwStubPhase);
 HRESULT CALLBACK IInternetZoneManager_CreateZoneEnumerator_Proxy(
@@ -3217,8 +3201,8 @@ HRESULT CALLBACK IInternetZoneManager_CreateZoneEnumerator_Proxy(
     DWORD* pdwCount,
     DWORD dwFlags);
 void __RPC_STUB IInternetZoneManager_CreateZoneEnumerator_Stub(
-    struct IRpcStubBuffer* This,
-    struct IRpcChannelBuffer* pRpcChannelBuffer,
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
     PRPC_MESSAGE pRpcMessage,
     DWORD* pdwStubPhase);
 HRESULT CALLBACK IInternetZoneManager_GetZoneAt_Proxy(
@@ -3227,16 +3211,16 @@ HRESULT CALLBACK IInternetZoneManager_GetZoneAt_Proxy(
     DWORD dwIndex,
     DWORD* pdwZone);
 void __RPC_STUB IInternetZoneManager_GetZoneAt_Stub(
-    struct IRpcStubBuffer* This,
-    struct IRpcChannelBuffer* pRpcChannelBuffer,
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
     PRPC_MESSAGE pRpcMessage,
     DWORD* pdwStubPhase);
 HRESULT CALLBACK IInternetZoneManager_DestroyZoneEnumerator_Proxy(
     IInternetZoneManager* This,
     DWORD dwEnum);
 void __RPC_STUB IInternetZoneManager_DestroyZoneEnumerator_Stub(
-    struct IRpcStubBuffer* This,
-    struct IRpcChannelBuffer* pRpcChannelBuffer,
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
     PRPC_MESSAGE pRpcMessage,
     DWORD* pdwStubPhase);
 HRESULT CALLBACK IInternetZoneManager_CopyTemplatePoliciesToZone_Proxy(
@@ -3245,8 +3229,8 @@ HRESULT CALLBACK IInternetZoneManager_CopyTemplatePoliciesToZone_Proxy(
     DWORD dwZone,
     DWORD dwReserved);
 void __RPC_STUB IInternetZoneManager_CopyTemplatePoliciesToZone_Stub(
-    struct IRpcStubBuffer* This,
-    struct IRpcChannelBuffer* pRpcChannelBuffer,
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
     PRPC_MESSAGE pRpcMessage,
     DWORD* pdwStubPhase);
 
@@ -3277,7 +3261,7 @@ typedef struct _tagCODEBASEHOLD {
 } CODEBASEHOLD, *LPCODEBASEHOLD;
 #ifndef __ISoftDistExt_FWD_DEFINED__
 #define __ISoftDistExt_FWD_DEFINED__
-typedef struct ISoftDistExt ISoftDistExt;
+typedef interface ISoftDistExt ISoftDistExt;
 #endif
 
 /*****************************************************************************
@@ -3288,7 +3272,7 @@ typedef struct ISoftDistExt ISoftDistExt;
 
 DEFINE_GUID(IID_ISoftDistExt, 0xb15b8dc1, 0xc7e1, 0x11d0, 0x86,0x80, 0x00,0xaa,0x00,0xbd,0xcb,0x71);
 #if defined(__cplusplus) && !defined(CINTERFACE)
-struct ISoftDistExt : public IUnknown
+interface ISoftDistExt : public IUnknown
 {
     virtual HRESULT STDMETHODCALLTYPE ProcessSoftDist(
         LPCWSTR szCDFURL,
@@ -3311,11 +3295,7 @@ struct ISoftDistExt : public IUnknown
 
 };
 #else
-typedef struct ISoftDistExtVtbl ISoftDistExtVtbl;
-struct ISoftDistExt {
-    const ISoftDistExtVtbl* lpVtbl;
-};
-struct ISoftDistExtVtbl {
+typedef struct ISoftDistExtVtbl {
     BEGIN_INTERFACE
 
     /*** IUnknown methods ***/
@@ -3355,6 +3335,9 @@ struct ISoftDistExtVtbl {
         LPCODEBASEHOLD lpcbh);
 
     END_INTERFACE
+} ISoftDistExtVtbl;
+interface ISoftDistExt {
+    const ISoftDistExtVtbl* lpVtbl;
 };
 
 #ifdef COBJMACROS
@@ -3377,8 +3360,8 @@ HRESULT CALLBACK ISoftDistExt_ProcessSoftDist_Proxy(
     IXMLElement* pSoftDistElement,
     LPSOFTDISTINFO lpsdi);
 void __RPC_STUB ISoftDistExt_ProcessSoftDist_Stub(
-    struct IRpcStubBuffer* This,
-    struct IRpcChannelBuffer* pRpcChannelBuffer,
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
     PRPC_MESSAGE pRpcMessage,
     DWORD* pdwStubPhase);
 HRESULT CALLBACK ISoftDistExt_GetFirstCodeBase_Proxy(
@@ -3386,8 +3369,8 @@ HRESULT CALLBACK ISoftDistExt_GetFirstCodeBase_Proxy(
     LPWSTR* szCodeBase,
     LPDWORD dwMaxSize);
 void __RPC_STUB ISoftDistExt_GetFirstCodeBase_Stub(
-    struct IRpcStubBuffer* This,
-    struct IRpcChannelBuffer* pRpcChannelBuffer,
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
     PRPC_MESSAGE pRpcMessage,
     DWORD* pdwStubPhase);
 HRESULT CALLBACK ISoftDistExt_GetNextCodeBase_Proxy(
@@ -3395,8 +3378,8 @@ HRESULT CALLBACK ISoftDistExt_GetNextCodeBase_Proxy(
     LPWSTR* szCodeBase,
     LPDWORD dwMaxSize);
 void __RPC_STUB ISoftDistExt_GetNextCodeBase_Stub(
-    struct IRpcStubBuffer* This,
-    struct IRpcChannelBuffer* pRpcChannelBuffer,
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
     PRPC_MESSAGE pRpcMessage,
     DWORD* pdwStubPhase);
 HRESULT CALLBACK ISoftDistExt_AsyncInstallDistributionUnit_Proxy(
@@ -3406,8 +3389,8 @@ HRESULT CALLBACK ISoftDistExt_AsyncInstallDistributionUnit_Proxy(
     DWORD flags,
     LPCODEBASEHOLD lpcbh);
 void __RPC_STUB ISoftDistExt_AsyncInstallDistributionUnit_Stub(
-    struct IRpcStubBuffer* This,
-    struct IRpcChannelBuffer* pRpcChannelBuffer,
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
     PRPC_MESSAGE pRpcMessage,
     DWORD* pdwStubPhase);