diff --git a/mingw-w64-headers/Makefile.am b/mingw-w64-headers/Makefile.am
index 88fb541..d93a0cc 100644
--- a/mingw-w64-headers/Makefile.am
+++ b/mingw-w64-headers/Makefile.am
@@ -95,7 +95,9 @@
   include/ctxtcall.idl \
   include/d3d10.idl \
   include/d3d10_1.idl \
+  include/d3d10effect.idl \
   include/d3d10sdklayers.idl \
+  include/d3d10shader.idl \
   include/d3d11.idl \
   include/d3d11_1.idl \
   include/d3d11_2.idl \
diff --git a/mingw-w64-headers/Makefile.in b/mingw-w64-headers/Makefile.in
index 144901f..67e71ab 100644
--- a/mingw-w64-headers/Makefile.in
+++ b/mingw-w64-headers/Makefile.in
@@ -397,7 +397,9 @@
 @HAVE_WIDL_TRUE@  include/ctxtcall.idl \
 @HAVE_WIDL_TRUE@  include/d3d10.idl \
 @HAVE_WIDL_TRUE@  include/d3d10_1.idl \
+@HAVE_WIDL_TRUE@  include/d3d10effect.idl \
 @HAVE_WIDL_TRUE@  include/d3d10sdklayers.idl \
+@HAVE_WIDL_TRUE@  include/d3d10shader.idl \
 @HAVE_WIDL_TRUE@  include/d3d11.idl \
 @HAVE_WIDL_TRUE@  include/d3d11_1.idl \
 @HAVE_WIDL_TRUE@  include/d3d11_2.idl \
diff --git a/mingw-w64-headers/include/activation.h b/mingw-w64-headers/include/activation.h
index 5a6401a..e1fe68f 100644
--- a/mingw-w64-headers/include/activation.h
+++ b/mingw-w64-headers/include/activation.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/activation.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/activation.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/activaut.h b/mingw-w64-headers/include/activaut.h
index 24cf179..2d52f25 100644
--- a/mingw-w64-headers/include/activaut.h
+++ b/mingw-w64-headers/include/activaut.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/activaut.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/activaut.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/activdbg.h b/mingw-w64-headers/include/activdbg.h
index 9f5461e..a79a3d2 100644
--- a/mingw-w64-headers/include/activdbg.h
+++ b/mingw-w64-headers/include/activdbg.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/activdbg.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/activdbg.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/activdbg100.h b/mingw-w64-headers/include/activdbg100.h
index d4a380e..ed8c93a 100644
--- a/mingw-w64-headers/include/activdbg100.h
+++ b/mingw-w64-headers/include/activdbg100.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/activdbg100.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/activdbg100.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/activprof.h b/mingw-w64-headers/include/activprof.h
index a7d627d..47b4ded 100644
--- a/mingw-w64-headers/include/activprof.h
+++ b/mingw-w64-headers/include/activprof.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/activprof.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/activprof.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/activscp.h b/mingw-w64-headers/include/activscp.h
index df4f61b..df6e0d8 100644
--- a/mingw-w64-headers/include/activscp.h
+++ b/mingw-w64-headers/include/activscp.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/activscp.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/activscp.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/adhoc.h b/mingw-w64-headers/include/adhoc.h
index d4363ae..ce199ac 100644
--- a/mingw-w64-headers/include/adhoc.h
+++ b/mingw-w64-headers/include/adhoc.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/adhoc.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/adhoc.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/alg.h b/mingw-w64-headers/include/alg.h
index 0a52ca4..c1e2c89 100644
--- a/mingw-w64-headers/include/alg.h
+++ b/mingw-w64-headers/include/alg.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/alg.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/alg.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/amstream.h b/mingw-w64-headers/include/amstream.h
index 25e125e..fa8d527 100644
--- a/mingw-w64-headers/include/amstream.h
+++ b/mingw-w64-headers/include/amstream.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/amstream.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/amstream.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/amvideo.h b/mingw-w64-headers/include/amvideo.h
index d615ac2..955cfdc 100644
--- a/mingw-w64-headers/include/amvideo.h
+++ b/mingw-w64-headers/include/amvideo.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/amvideo.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/amvideo.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/asyncinfo.h b/mingw-w64-headers/include/asyncinfo.h
index 4cf8fc8..28fceaf 100644
--- a/mingw-w64-headers/include/asyncinfo.h
+++ b/mingw-w64-headers/include/asyncinfo.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/asyncinfo.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/asyncinfo.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/audioclient.h b/mingw-w64-headers/include/audioclient.h
index 27564d2..43eff37 100644
--- a/mingw-w64-headers/include/audioclient.h
+++ b/mingw-w64-headers/include/audioclient.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/audioclient.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/audioclient.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/audioendpoints.h b/mingw-w64-headers/include/audioendpoints.h
index 24e4b8d..e9d78f9 100644
--- a/mingw-w64-headers/include/audioendpoints.h
+++ b/mingw-w64-headers/include/audioendpoints.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/audioendpoints.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/audioendpoints.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/audiopolicy.h b/mingw-w64-headers/include/audiopolicy.h
index 0edc214..a385fd3 100644
--- a/mingw-w64-headers/include/audiopolicy.h
+++ b/mingw-w64-headers/include/audiopolicy.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/audiopolicy.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/audiopolicy.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/austream.h b/mingw-w64-headers/include/austream.h
index ef1fccb..f57b47d 100644
--- a/mingw-w64-headers/include/austream.h
+++ b/mingw-w64-headers/include/austream.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/austream.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/austream.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/bdaiface.h b/mingw-w64-headers/include/bdaiface.h
index 3ad6caa..191ca92 100644
--- a/mingw-w64-headers/include/bdaiface.h
+++ b/mingw-w64-headers/include/bdaiface.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/bdaiface.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/bdaiface.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/bits.h b/mingw-w64-headers/include/bits.h
index 52f08e9..9cdb003 100644
--- a/mingw-w64-headers/include/bits.h
+++ b/mingw-w64-headers/include/bits.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/bits.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/bits.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/bits1_5.h b/mingw-w64-headers/include/bits1_5.h
index 3fd4db0..3bd6765 100644
--- a/mingw-w64-headers/include/bits1_5.h
+++ b/mingw-w64-headers/include/bits1_5.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/bits1_5.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/bits1_5.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/bits2_0.h b/mingw-w64-headers/include/bits2_0.h
index c10966a..bc6dc29 100644
--- a/mingw-w64-headers/include/bits2_0.h
+++ b/mingw-w64-headers/include/bits2_0.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/bits2_0.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/bits2_0.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/bits2_5.h b/mingw-w64-headers/include/bits2_5.h
index a1b7927..4766ca3 100644
--- a/mingw-w64-headers/include/bits2_5.h
+++ b/mingw-w64-headers/include/bits2_5.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/bits2_5.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/bits2_5.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/bits3_0.h b/mingw-w64-headers/include/bits3_0.h
index 6460016..3a1e0f1 100644
--- a/mingw-w64-headers/include/bits3_0.h
+++ b/mingw-w64-headers/include/bits3_0.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/bits3_0.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/bits3_0.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/bits5_0.h b/mingw-w64-headers/include/bits5_0.h
index 57a391c..127f175 100644
--- a/mingw-w64-headers/include/bits5_0.h
+++ b/mingw-w64-headers/include/bits5_0.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/bits5_0.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/bits5_0.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/comadmin.h b/mingw-w64-headers/include/comadmin.h
index db2495a..e37f6bb 100644
--- a/mingw-w64-headers/include/comadmin.h
+++ b/mingw-w64-headers/include/comadmin.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/comadmin.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/comadmin.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/comcat.h b/mingw-w64-headers/include/comcat.h
index 7121076..77e20cf 100644
--- a/mingw-w64-headers/include/comcat.h
+++ b/mingw-w64-headers/include/comcat.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/comcat.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/comcat.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/commoncontrols.h b/mingw-w64-headers/include/commoncontrols.h
index fc12899..bf94ec4 100644
--- a/mingw-w64-headers/include/commoncontrols.h
+++ b/mingw-w64-headers/include/commoncontrols.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/commoncontrols.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/commoncontrols.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/control.h b/mingw-w64-headers/include/control.h
index f451ef5..2c51c29 100644
--- a/mingw-w64-headers/include/control.h
+++ b/mingw-w64-headers/include/control.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/control.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/control.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/credentialprovider.h b/mingw-w64-headers/include/credentialprovider.h
index e5929ca..4c7d022 100644
--- a/mingw-w64-headers/include/credentialprovider.h
+++ b/mingw-w64-headers/include/credentialprovider.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/credentialprovider.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/credentialprovider.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/ctfutb.h b/mingw-w64-headers/include/ctfutb.h
index e2cd213..b58cccc 100644
--- a/mingw-w64-headers/include/ctfutb.h
+++ b/mingw-w64-headers/include/ctfutb.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/ctfutb.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/ctfutb.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/ctxtcall.h b/mingw-w64-headers/include/ctxtcall.h
index d38e825..92b6a2f 100644
--- a/mingw-w64-headers/include/ctxtcall.h
+++ b/mingw-w64-headers/include/ctxtcall.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/ctxtcall.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/ctxtcall.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/d3d10.h b/mingw-w64-headers/include/d3d10.h
index decd102..2182239 100644
--- a/mingw-w64-headers/include/d3d10.h
+++ b/mingw-w64-headers/include/d3d10.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/d3d10.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/d3d10.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/d3d10_1.h b/mingw-w64-headers/include/d3d10_1.h
index 755e800..6ce76da 100644
--- a/mingw-w64-headers/include/d3d10_1.h
+++ b/mingw-w64-headers/include/d3d10_1.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/d3d10_1.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/d3d10_1.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/d3d10effect.h b/mingw-w64-headers/include/d3d10effect.h
index 25edd30..4caf279 100644
--- a/mingw-w64-headers/include/d3d10effect.h
+++ b/mingw-w64-headers/include/d3d10effect.h
@@ -1,66 +1,348 @@
-#undef INTERFACE
-/*
- * Copyright 2009 Henri Verbeet 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
- *
- */
+/*** Autogenerated by WIDL 8.19 from include/d3d10effect.idl - Do not edit ***/
 
-#ifndef __WINE_D3D10EFFECT_H
-#define __WINE_D3D10EFFECT_H
+#ifdef _WIN32
+#ifndef __REQUIRED_RPCNDR_H_VERSION__
+#define __REQUIRED_RPCNDR_H_VERSION__ 475
+#endif
+#include <rpc.h>
+#include <rpcndr.h>
+#endif
 
-#include "d3d10.h"
+#ifndef COM_NO_WINDOWS_H
+#include <windows.h>
+#include <ole2.h>
+#endif
 
-#define D3D10_EFFECT_VARIABLE_POOLED                0x1
-#define D3D10_EFFECT_VARIABLE_ANNOTATION            0x2
-#define D3D10_EFFECT_VARIABLE_EXPLICIT_BIND_POINT   0x4
+#ifndef __d3d10effect_h__
+#define __d3d10effect_h__
+
+#ifndef __WIDL_INLINE
+#if defined(__cplusplus) || defined(_MSC_VER)
+#define __WIDL_INLINE inline
+#elif defined(__GNUC__)
+#define __WIDL_INLINE __inline__
+#endif
+#endif
+
+/* Forward declarations */
+
+#ifndef __ID3D10EffectType_FWD_DEFINED__
+#define __ID3D10EffectType_FWD_DEFINED__
+typedef interface ID3D10EffectType ID3D10EffectType;
+#ifdef __cplusplus
+interface ID3D10EffectType;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __ID3D10EffectVariable_FWD_DEFINED__
+#define __ID3D10EffectVariable_FWD_DEFINED__
+typedef interface ID3D10EffectVariable ID3D10EffectVariable;
+#ifdef __cplusplus
+interface ID3D10EffectVariable;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __ID3D10EffectConstantBuffer_FWD_DEFINED__
+#define __ID3D10EffectConstantBuffer_FWD_DEFINED__
+typedef interface ID3D10EffectConstantBuffer ID3D10EffectConstantBuffer;
+#ifdef __cplusplus
+interface ID3D10EffectConstantBuffer;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __ID3D10EffectScalarVariable_FWD_DEFINED__
+#define __ID3D10EffectScalarVariable_FWD_DEFINED__
+typedef interface ID3D10EffectScalarVariable ID3D10EffectScalarVariable;
+#ifdef __cplusplus
+interface ID3D10EffectScalarVariable;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __ID3D10EffectVectorVariable_FWD_DEFINED__
+#define __ID3D10EffectVectorVariable_FWD_DEFINED__
+typedef interface ID3D10EffectVectorVariable ID3D10EffectVectorVariable;
+#ifdef __cplusplus
+interface ID3D10EffectVectorVariable;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __ID3D10EffectMatrixVariable_FWD_DEFINED__
+#define __ID3D10EffectMatrixVariable_FWD_DEFINED__
+typedef interface ID3D10EffectMatrixVariable ID3D10EffectMatrixVariable;
+#ifdef __cplusplus
+interface ID3D10EffectMatrixVariable;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __ID3D10EffectStringVariable_FWD_DEFINED__
+#define __ID3D10EffectStringVariable_FWD_DEFINED__
+typedef interface ID3D10EffectStringVariable ID3D10EffectStringVariable;
+#ifdef __cplusplus
+interface ID3D10EffectStringVariable;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __ID3D10EffectShaderResourceVariable_FWD_DEFINED__
+#define __ID3D10EffectShaderResourceVariable_FWD_DEFINED__
+typedef interface ID3D10EffectShaderResourceVariable ID3D10EffectShaderResourceVariable;
+#ifdef __cplusplus
+interface ID3D10EffectShaderResourceVariable;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __ID3D10EffectRenderTargetViewVariable_FWD_DEFINED__
+#define __ID3D10EffectRenderTargetViewVariable_FWD_DEFINED__
+typedef interface ID3D10EffectRenderTargetViewVariable ID3D10EffectRenderTargetViewVariable;
+#ifdef __cplusplus
+interface ID3D10EffectRenderTargetViewVariable;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __ID3D10EffectDepthStencilViewVariable_FWD_DEFINED__
+#define __ID3D10EffectDepthStencilViewVariable_FWD_DEFINED__
+typedef interface ID3D10EffectDepthStencilViewVariable ID3D10EffectDepthStencilViewVariable;
+#ifdef __cplusplus
+interface ID3D10EffectDepthStencilViewVariable;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __ID3D10EffectShaderVariable_FWD_DEFINED__
+#define __ID3D10EffectShaderVariable_FWD_DEFINED__
+typedef interface ID3D10EffectShaderVariable ID3D10EffectShaderVariable;
+#ifdef __cplusplus
+interface ID3D10EffectShaderVariable;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __ID3D10EffectBlendVariable_FWD_DEFINED__
+#define __ID3D10EffectBlendVariable_FWD_DEFINED__
+typedef interface ID3D10EffectBlendVariable ID3D10EffectBlendVariable;
+#ifdef __cplusplus
+interface ID3D10EffectBlendVariable;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __ID3D10EffectDepthStencilVariable_FWD_DEFINED__
+#define __ID3D10EffectDepthStencilVariable_FWD_DEFINED__
+typedef interface ID3D10EffectDepthStencilVariable ID3D10EffectDepthStencilVariable;
+#ifdef __cplusplus
+interface ID3D10EffectDepthStencilVariable;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __ID3D10EffectRasterizerVariable_FWD_DEFINED__
+#define __ID3D10EffectRasterizerVariable_FWD_DEFINED__
+typedef interface ID3D10EffectRasterizerVariable ID3D10EffectRasterizerVariable;
+#ifdef __cplusplus
+interface ID3D10EffectRasterizerVariable;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __ID3D10EffectSamplerVariable_FWD_DEFINED__
+#define __ID3D10EffectSamplerVariable_FWD_DEFINED__
+typedef interface ID3D10EffectSamplerVariable ID3D10EffectSamplerVariable;
+#ifdef __cplusplus
+interface ID3D10EffectSamplerVariable;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __ID3D10EffectTechnique_FWD_DEFINED__
+#define __ID3D10EffectTechnique_FWD_DEFINED__
+typedef interface ID3D10EffectTechnique ID3D10EffectTechnique;
+#ifdef __cplusplus
+interface ID3D10EffectTechnique;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __ID3D10Effect_FWD_DEFINED__
+#define __ID3D10Effect_FWD_DEFINED__
+typedef interface ID3D10Effect ID3D10Effect;
+#ifdef __cplusplus
+interface ID3D10Effect;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __ID3D10EffectPool_FWD_DEFINED__
+#define __ID3D10EffectPool_FWD_DEFINED__
+typedef interface ID3D10EffectPool ID3D10EffectPool;
+#ifdef __cplusplus
+interface ID3D10EffectPool;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __ID3D10EffectPass_FWD_DEFINED__
+#define __ID3D10EffectPass_FWD_DEFINED__
+typedef interface ID3D10EffectPass ID3D10EffectPass;
+#ifdef __cplusplus
+interface ID3D10EffectPass;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __ID3D10StateBlock_FWD_DEFINED__
+#define __ID3D10StateBlock_FWD_DEFINED__
+typedef interface ID3D10StateBlock ID3D10StateBlock;
+#ifdef __cplusplus
+interface ID3D10StateBlock;
+#endif /* __cplusplus */
+#endif
+
+/* Headers for imported files */
+
+#include <d3d10.h>
+#include <d3d10shader.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef __ID3D10EffectConstantBuffer_FWD_DEFINED__
+#define __ID3D10EffectConstantBuffer_FWD_DEFINED__
+typedef interface ID3D10EffectConstantBuffer ID3D10EffectConstantBuffer;
+#ifdef __cplusplus
+interface ID3D10EffectConstantBuffer;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __ID3D10EffectBlendVariable_FWD_DEFINED__
+#define __ID3D10EffectBlendVariable_FWD_DEFINED__
+typedef interface ID3D10EffectBlendVariable ID3D10EffectBlendVariable;
+#ifdef __cplusplus
+interface ID3D10EffectBlendVariable;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __ID3D10EffectDepthStencilVariable_FWD_DEFINED__
+#define __ID3D10EffectDepthStencilVariable_FWD_DEFINED__
+typedef interface ID3D10EffectDepthStencilVariable ID3D10EffectDepthStencilVariable;
+#ifdef __cplusplus
+interface ID3D10EffectDepthStencilVariable;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __ID3D10EffectDepthStencilViewVariable_FWD_DEFINED__
+#define __ID3D10EffectDepthStencilViewVariable_FWD_DEFINED__
+typedef interface ID3D10EffectDepthStencilViewVariable ID3D10EffectDepthStencilViewVariable;
+#ifdef __cplusplus
+interface ID3D10EffectDepthStencilViewVariable;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __ID3D10EffectMatrixVariable_FWD_DEFINED__
+#define __ID3D10EffectMatrixVariable_FWD_DEFINED__
+typedef interface ID3D10EffectMatrixVariable ID3D10EffectMatrixVariable;
+#ifdef __cplusplus
+interface ID3D10EffectMatrixVariable;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __ID3D10EffectPass_FWD_DEFINED__
+#define __ID3D10EffectPass_FWD_DEFINED__
+typedef interface ID3D10EffectPass ID3D10EffectPass;
+#ifdef __cplusplus
+interface ID3D10EffectPass;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __ID3D10EffectRasterizerVariable_FWD_DEFINED__
+#define __ID3D10EffectRasterizerVariable_FWD_DEFINED__
+typedef interface ID3D10EffectRasterizerVariable ID3D10EffectRasterizerVariable;
+#ifdef __cplusplus
+interface ID3D10EffectRasterizerVariable;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __ID3D10EffectRenderTargetViewVariable_FWD_DEFINED__
+#define __ID3D10EffectRenderTargetViewVariable_FWD_DEFINED__
+typedef interface ID3D10EffectRenderTargetViewVariable ID3D10EffectRenderTargetViewVariable;
+#ifdef __cplusplus
+interface ID3D10EffectRenderTargetViewVariable;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __ID3D10EffectSamplerVariable_FWD_DEFINED__
+#define __ID3D10EffectSamplerVariable_FWD_DEFINED__
+typedef interface ID3D10EffectSamplerVariable ID3D10EffectSamplerVariable;
+#ifdef __cplusplus
+interface ID3D10EffectSamplerVariable;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __ID3D10EffectScalarVariable_FWD_DEFINED__
+#define __ID3D10EffectScalarVariable_FWD_DEFINED__
+typedef interface ID3D10EffectScalarVariable ID3D10EffectScalarVariable;
+#ifdef __cplusplus
+interface ID3D10EffectScalarVariable;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __ID3D10EffectShaderVariable_FWD_DEFINED__
+#define __ID3D10EffectShaderVariable_FWD_DEFINED__
+typedef interface ID3D10EffectShaderVariable ID3D10EffectShaderVariable;
+#ifdef __cplusplus
+interface ID3D10EffectShaderVariable;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __ID3D10EffectShaderResourceVariable_FWD_DEFINED__
+#define __ID3D10EffectShaderResourceVariable_FWD_DEFINED__
+typedef interface ID3D10EffectShaderResourceVariable ID3D10EffectShaderResourceVariable;
+#ifdef __cplusplus
+interface ID3D10EffectShaderResourceVariable;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __ID3D10EffectStringVariable_FWD_DEFINED__
+#define __ID3D10EffectStringVariable_FWD_DEFINED__
+typedef interface ID3D10EffectStringVariable ID3D10EffectStringVariable;
+#ifdef __cplusplus
+interface ID3D10EffectStringVariable;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __ID3D10EffectVectorVariable_FWD_DEFINED__
+#define __ID3D10EffectVectorVariable_FWD_DEFINED__
+typedef interface ID3D10EffectVectorVariable ID3D10EffectVectorVariable;
+#ifdef __cplusplus
+interface ID3D10EffectVectorVariable;
+#endif /* __cplusplus */
+#endif
 
 #ifndef D3D10_BYTES_FROM_BITS
 #define D3D10_BYTES_FROM_BITS(x) (((x) + 7) >> 3)
 #endif
+#define D3D10_EFFECT_VARIABLE_POOLED (0x1)
 
-typedef enum _D3D10_DEVICE_STATE_TYPES
-{
+#define D3D10_EFFECT_VARIABLE_ANNOTATION (0x2)
+
+#define D3D10_EFFECT_VARIABLE_EXPLICIT_BIND_POINT (0x4)
+
+typedef enum _D3D10_DEVICE_STATE_TYPES {
     D3D10_DST_SO_BUFFERS = 1,
-    D3D10_DST_OM_RENDER_TARGETS,
-    D3D10_DST_OM_DEPTH_STENCIL_STATE,
-    D3D10_DST_OM_BLEND_STATE,
-    D3D10_DST_VS,
-    D3D10_DST_VS_SAMPLERS,
-    D3D10_DST_VS_SHADER_RESOURCES,
-    D3D10_DST_VS_CONSTANT_BUFFERS,
-    D3D10_DST_GS,
-    D3D10_DST_GS_SAMPLERS,
-    D3D10_DST_GS_SHADER_RESOURCES,
-    D3D10_DST_GS_CONSTANT_BUFFERS,
-    D3D10_DST_PS,
-    D3D10_DST_PS_SAMPLERS,
-    D3D10_DST_PS_SHADER_RESOURCES,
-    D3D10_DST_PS_CONSTANT_BUFFERS,
-    D3D10_DST_IA_VERTEX_BUFFERS,
-    D3D10_DST_IA_INDEX_BUFFER,
-    D3D10_DST_IA_INPUT_LAYOUT,
-    D3D10_DST_IA_PRIMITIVE_TOPOLOGY,
-    D3D10_DST_RS_VIEWPORTS,
-    D3D10_DST_RS_SCISSOR_RECTS,
-    D3D10_DST_RS_RASTERIZER_STATE,
-    D3D10_DST_PREDICATION,
+    D3D10_DST_OM_RENDER_TARGETS = 2,
+    D3D10_DST_OM_DEPTH_STENCIL_STATE = 3,
+    D3D10_DST_OM_BLEND_STATE = 4,
+    D3D10_DST_VS = 5,
+    D3D10_DST_VS_SAMPLERS = 6,
+    D3D10_DST_VS_SHADER_RESOURCES = 7,
+    D3D10_DST_VS_CONSTANT_BUFFERS = 8,
+    D3D10_DST_GS = 9,
+    D3D10_DST_GS_SAMPLERS = 10,
+    D3D10_DST_GS_SHADER_RESOURCES = 11,
+    D3D10_DST_GS_CONSTANT_BUFFERS = 12,
+    D3D10_DST_PS = 13,
+    D3D10_DST_PS_SAMPLERS = 14,
+    D3D10_DST_PS_SHADER_RESOURCES = 15,
+    D3D10_DST_PS_CONSTANT_BUFFERS = 16,
+    D3D10_DST_IA_VERTEX_BUFFERS = 17,
+    D3D10_DST_IA_INDEX_BUFFER = 18,
+    D3D10_DST_IA_INPUT_LAYOUT = 19,
+    D3D10_DST_IA_PRIMITIVE_TOPOLOGY = 20,
+    D3D10_DST_RS_VIEWPORTS = 21,
+    D3D10_DST_RS_SCISSOR_RECTS = 22,
+    D3D10_DST_RS_RASTERIZER_STATE = 23,
+    D3D10_DST_PREDICATION = 24
 } D3D10_DEVICE_STATE_TYPES;
-
-typedef struct _D3D10_EFFECT_TYPE_DESC
-{
+typedef struct _D3D10_EFFECT_TYPE_DESC {
     const char *TypeName;
     D3D10_SHADER_VARIABLE_CLASS Class;
     D3D10_SHADER_VARIABLE_TYPE Type;
@@ -72,9 +354,7 @@
     UINT UnpackedSize;
     UINT Stride;
 } D3D10_EFFECT_TYPE_DESC;
-
-typedef struct _D3D10_EFFECT_VARIABLE_DESC
-{
+typedef struct _D3D10_EFFECT_VARIABLE_DESC {
     const char *Name;
     const char *Semantic;
     UINT Flags;
@@ -82,29 +362,25 @@
     UINT BufferOffset;
     UINT ExplicitBindPoint;
 } D3D10_EFFECT_VARIABLE_DESC;
-
-typedef struct _D3D10_TECHNIQUE_DESC
-{
+typedef struct _D3D10_TECHNIQUE_DESC {
     const char *Name;
     UINT Passes;
     UINT Annotations;
 } D3D10_TECHNIQUE_DESC;
-
-typedef struct _D3D10_STATE_BLOCK_MASK
-{
+typedef struct _D3D10_STATE_BLOCK_MASK {
     BYTE VS;
-    BYTE VSSamplers[D3D10_BYTES_FROM_BITS(D3D10_COMMONSHADER_SAMPLER_SLOT_COUNT)];
-    BYTE VSShaderResources[D3D10_BYTES_FROM_BITS(D3D10_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT)];
-    BYTE VSConstantBuffers[D3D10_BYTES_FROM_BITS(D3D10_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT)];
+    BYTE VSSamplers[2];
+    BYTE VSShaderResources[16];
+    BYTE VSConstantBuffers[2];
     BYTE GS;
-    BYTE GSSamplers[D3D10_BYTES_FROM_BITS(D3D10_COMMONSHADER_SAMPLER_SLOT_COUNT)];
-    BYTE GSShaderResources[D3D10_BYTES_FROM_BITS(D3D10_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT)];
-    BYTE GSConstantBuffers[D3D10_BYTES_FROM_BITS(D3D10_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT)];
+    BYTE GSSamplers[2];
+    BYTE GSShaderResources[16];
+    BYTE GSConstantBuffers[2];
     BYTE PS;
-    BYTE PSSamplers[D3D10_BYTES_FROM_BITS(D3D10_COMMONSHADER_SAMPLER_SLOT_COUNT)];
-    BYTE PSShaderResources[D3D10_BYTES_FROM_BITS(D3D10_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT)];
-    BYTE PSConstantBuffers[D3D10_BYTES_FROM_BITS(D3D10_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT)];
-    BYTE IAVertexBuffers[D3D10_BYTES_FROM_BITS(D3D10_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT)];
+    BYTE PSSamplers[2];
+    BYTE PSShaderResources[16];
+    BYTE PSConstantBuffers[2];
+    BYTE IAVertexBuffers[2];
     BYTE IAIndexBuffer;
     BYTE IAInputLayout;
     BYTE IAPrimitiveTopology;
@@ -117,9 +393,7 @@
     BYTE SOBuffers;
     BYTE Predication;
 } D3D10_STATE_BLOCK_MASK;
-
-typedef struct _D3D10_EFFECT_DESC
-{
+typedef struct _D3D10_EFFECT_DESC {
     WINBOOL IsChildEffect;
     UINT ConstantBuffers;
     UINT SharedConstantBuffers;
@@ -127,9 +401,7 @@
     UINT SharedGlobalVariables;
     UINT Techniques;
 } D3D10_EFFECT_DESC;
-
-typedef struct _D3D10_EFFECT_SHADER_DESC
-{
+typedef struct _D3D10_EFFECT_SHADER_DESC {
     const BYTE *pInputSignature;
     WINBOOL IsInline;
     const BYTE *pBytecode;
@@ -138,9 +410,7 @@
     UINT NumInputSignatureEntries;
     UINT NumOutputSignatureEntries;
 } D3D10_EFFECT_SHADER_DESC;
-
-typedef struct _D3D10_PASS_DESC
-{
+typedef struct _D3D10_PASS_DESC {
     const char *Name;
     UINT Annotations;
     BYTE *pIAInputSignature;
@@ -149,712 +419,4963 @@
     UINT SampleMask;
     FLOAT BlendFactor[4];
 } D3D10_PASS_DESC;
-
-typedef struct _D3D10_PASS_SHADER_DESC
-{
-    struct ID3D10EffectShaderVariable *pShaderVariable;
+typedef struct _D3D10_PASS_SHADER_DESC {
+    ID3D10EffectShaderVariable *pShaderVariable;
     UINT ShaderIndex;
 } D3D10_PASS_SHADER_DESC;
+#define D3D10_EFFECT_COMPILE_CHILD_EFFECT (0x1)
 
-#define D3D10_EFFECT_COMPILE_CHILD_EFFECT    0x0001
-#define D3D10_EFFECT_COMPILE_ALLOW_SLOW_OPS  0x0002
-#define D3D10_EFFECT_SINGLE_THREADED         0x0008
+#define D3D10_EFFECT_COMPILE_ALLOW_SLOW_OPS (0x2)
 
-DEFINE_GUID(IID_ID3D10EffectType, 0x4e9e1ddc, 0xcd9d, 0x4772, 0xa8, 0x37, 0x00, 0x18, 0x0b, 0x9b, 0x88, 0xfd);
+#define D3D10_EFFECT_SINGLE_THREADED (0x8)
 
-#define INTERFACE ID3D10EffectType
-DECLARE_INTERFACE(ID3D10EffectType)
+/*****************************************************************************
+ * ID3D10EffectType interface
+ */
+#ifndef __ID3D10EffectType_INTERFACE_DEFINED__
+#define __ID3D10EffectType_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_ID3D10EffectType, 0x4e9e1ddc, 0xcd9d, 0x4772, 0xa8,0x37, 0x00,0x18,0x0b,0x9b,0x88,0xfd);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("4e9e1ddc-cd9d-4772-a837-00180b9b88fd")
+ID3D10EffectType
 {
-    STDMETHOD_(WINBOOL, IsValid)(THIS) PURE;
-    STDMETHOD(GetDesc)(THIS_ D3D10_EFFECT_TYPE_DESC *desc) PURE;
-    STDMETHOD_(struct ID3D10EffectType *, GetMemberTypeByIndex)(THIS_ UINT index) PURE;
-    STDMETHOD_(struct ID3D10EffectType *, GetMemberTypeByName)(THIS_ const char *name) PURE;
-    STDMETHOD_(struct ID3D10EffectType *, GetMemberTypeBySemantic)(THIS_ const char *semantic) PURE;
-    STDMETHOD_(const char *, GetMemberName)(THIS_ UINT index) PURE;
-    STDMETHOD_(const char *, GetMemberSemantic)(THIS_ UINT index) PURE;
+
+    BEGIN_INTERFACE
+
+    virtual WINBOOL STDMETHODCALLTYPE IsValid(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetDesc(
+        D3D10_EFFECT_TYPE_DESC *desc) = 0;
+
+    virtual ID3D10EffectType * STDMETHODCALLTYPE GetMemberTypeByIndex(
+        UINT index) = 0;
+
+    virtual ID3D10EffectType * STDMETHODCALLTYPE GetMemberTypeByName(
+        const char *name) = 0;
+
+    virtual ID3D10EffectType * STDMETHODCALLTYPE GetMemberTypeBySemantic(
+        const char *semantic) = 0;
+
+    virtual const char * STDMETHODCALLTYPE GetMemberName(
+        UINT index) = 0;
+
+    virtual const char * STDMETHODCALLTYPE GetMemberSemantic(
+        UINT index) = 0;
+
+    END_INTERFACE
+
 };
-#undef INTERFACE
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(ID3D10EffectType, 0x4e9e1ddc, 0xcd9d, 0x4772, 0xa8,0x37, 0x00,0x18,0x0b,0x9b,0x88,0xfd)
+#endif
+#else
+typedef struct ID3D10EffectTypeVtbl {
+    BEGIN_INTERFACE
 
-DEFINE_GUID(IID_ID3D10EffectVariable, 0xae897105, 0x00e6, 0x45bf, 0xbb, 0x8e, 0x28, 0x1d, 0xd6, 0xdb, 0x8e, 0x1b);
+    /*** ID3D10EffectType methods ***/
+    WINBOOL (STDMETHODCALLTYPE *IsValid)(
+        ID3D10EffectType *This);
 
-#define INTERFACE ID3D10EffectVariable
-DECLARE_INTERFACE(ID3D10EffectVariable)
-{
-    STDMETHOD_(WINBOOL, IsValid)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectType *, GetType)(THIS) PURE;
-    STDMETHOD(GetDesc)(THIS_ D3D10_EFFECT_VARIABLE_DESC *desc) PURE;
-    STDMETHOD_(struct ID3D10EffectVariable *, GetAnnotationByIndex)(THIS_ UINT index) PURE;
-    STDMETHOD_(struct ID3D10EffectVariable *, GetAnnotationByName)(THIS_ const char *name) PURE;
-    STDMETHOD_(struct ID3D10EffectVariable *, GetMemberByIndex)(THIS_ UINT index) PURE;
-    STDMETHOD_(struct ID3D10EffectVariable *, GetMemberByName)(THIS_ const char *name) PURE;
-    STDMETHOD_(struct ID3D10EffectVariable *, GetMemberBySemantic)(THIS_ const char *semantic) PURE;
-    STDMETHOD_(struct ID3D10EffectVariable *, GetElement)(THIS_ UINT index) PURE;
-    STDMETHOD_(struct ID3D10EffectConstantBuffer *, GetParentConstantBuffer)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectScalarVariable *, AsScalar)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectVectorVariable *, AsVector)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectMatrixVariable *, AsMatrix)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectStringVariable *, AsString)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectShaderResourceVariable *, AsShaderResource)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectRenderTargetViewVariable *, AsRenderTargetView)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectDepthStencilViewVariable *, AsDepthStencilView)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectConstantBuffer *, AsConstantBuffer)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectShaderVariable *, AsShader)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectBlendVariable *, AsBlend)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectDepthStencilVariable *, AsDepthStencil)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectRasterizerVariable *, AsRasterizer)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectSamplerVariable *, AsSampler)(THIS) PURE;
-    STDMETHOD(SetRawValue)(THIS_ void *data, UINT offset, UINT count) PURE;
-    STDMETHOD(GetRawValue)(THIS_ void *data, UINT offset, UINT count) PURE;
+    HRESULT (STDMETHODCALLTYPE *GetDesc)(
+        ID3D10EffectType *This,
+        D3D10_EFFECT_TYPE_DESC *desc);
+
+    ID3D10EffectType * (STDMETHODCALLTYPE *GetMemberTypeByIndex)(
+        ID3D10EffectType *This,
+        UINT index);
+
+    ID3D10EffectType * (STDMETHODCALLTYPE *GetMemberTypeByName)(
+        ID3D10EffectType *This,
+        const char *name);
+
+    ID3D10EffectType * (STDMETHODCALLTYPE *GetMemberTypeBySemantic)(
+        ID3D10EffectType *This,
+        const char *semantic);
+
+    const char * (STDMETHODCALLTYPE *GetMemberName)(
+        ID3D10EffectType *This,
+        UINT index);
+
+    const char * (STDMETHODCALLTYPE *GetMemberSemantic)(
+        ID3D10EffectType *This,
+        UINT index);
+
+    END_INTERFACE
+} ID3D10EffectTypeVtbl;
+
+interface ID3D10EffectType {
+    CONST_VTBL ID3D10EffectTypeVtbl* lpVtbl;
 };
-#undef INTERFACE
 
-DEFINE_GUID(IID_ID3D10EffectConstantBuffer, 0x56648f4d, 0xcc8b, 0x4444, 0xa5, 0xad, 0xb5, 0xa3, 0xd7, 0x6e, 0x91, 0xb3);
-
-#define INTERFACE ID3D10EffectConstantBuffer
-DECLARE_INTERFACE_(ID3D10EffectConstantBuffer, ID3D10EffectVariable)
-{
-    /* ID3D10EffectVariable methods */
-    STDMETHOD_(WINBOOL, IsValid)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectType *, GetType)(THIS) PURE;
-    STDMETHOD(GetDesc)(THIS_ D3D10_EFFECT_VARIABLE_DESC *desc) PURE;
-    STDMETHOD_(struct ID3D10EffectVariable *, GetAnnotationByIndex)(THIS_ UINT index) PURE;
-    STDMETHOD_(struct ID3D10EffectVariable *, GetAnnotationByName)(THIS_ const char *name) PURE;
-    STDMETHOD_(struct ID3D10EffectVariable *, GetMemberByIndex)(THIS_ UINT index) PURE;
-    STDMETHOD_(struct ID3D10EffectVariable *, GetMemberByName)(THIS_ const char *name) PURE;
-    STDMETHOD_(struct ID3D10EffectVariable *, GetMemberBySemantic)(THIS_ const char *semantic) PURE;
-    STDMETHOD_(struct ID3D10EffectVariable *, GetElement)(THIS_ UINT index) PURE;
-    STDMETHOD_(struct ID3D10EffectConstantBuffer *, GetParentConstantBuffer)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectScalarVariable *, AsScalar)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectVectorVariable *, AsVector)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectMatrixVariable *, AsMatrix)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectStringVariable *, AsString)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectShaderResourceVariable *, AsShaderResource)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectRenderTargetViewVariable *, AsRenderTargetView)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectDepthStencilViewVariable *, AsDepthStencilView)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectConstantBuffer *, AsConstantBuffer)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectShaderVariable *, AsShader)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectBlendVariable *, AsBlend)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectDepthStencilVariable *, AsDepthStencil)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectRasterizerVariable *, AsRasterizer)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectSamplerVariable *, AsSampler)(THIS) PURE;
-    STDMETHOD(SetRawValue)(THIS_ void *data, UINT offset, UINT count) PURE;
-    STDMETHOD(GetRawValue)(THIS_ void *data, UINT offset, UINT count) PURE;
-    /* ID3D10EffectConstantBuffer methods */
-    STDMETHOD(SetConstantBuffer)(THIS_ ID3D10Buffer *buffer) PURE;
-    STDMETHOD(GetConstantBuffer)(THIS_ ID3D10Buffer **buffer) PURE;
-    STDMETHOD(SetTextureBuffer)(THIS_ ID3D10ShaderResourceView *view) PURE;
-    STDMETHOD(GetTextureBuffer)(THIS_ ID3D10ShaderResourceView **view) PURE;
-};
-#undef INTERFACE
-
-DEFINE_GUID(IID_ID3D10EffectScalarVariable, 0x00e48f7b, 0xd2c8, 0x49e8, 0xa8, 0x6c, 0x02, 0x2d, 0xee, 0x53, 0x43, 0x1f);
-
-#define INTERFACE ID3D10EffectScalarVariable
-DECLARE_INTERFACE_(ID3D10EffectScalarVariable, ID3D10EffectVariable)
-{
-    /* ID3D10EffectVariable methods */
-    STDMETHOD_(WINBOOL, IsValid)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectType *, GetType)(THIS) PURE;
-    STDMETHOD(GetDesc)(THIS_ D3D10_EFFECT_VARIABLE_DESC *desc) PURE;
-    STDMETHOD_(struct ID3D10EffectVariable *, GetAnnotationByIndex)(THIS_ UINT index) PURE;
-    STDMETHOD_(struct ID3D10EffectVariable *, GetAnnotationByName)(THIS_ const char *name) PURE;
-    STDMETHOD_(struct ID3D10EffectVariable *, GetMemberByIndex)(THIS_ UINT index) PURE;
-    STDMETHOD_(struct ID3D10EffectVariable *, GetMemberByName)(THIS_ const char *name) PURE;
-    STDMETHOD_(struct ID3D10EffectVariable *, GetMemberBySemantic)(THIS_ const char *semantic) PURE;
-    STDMETHOD_(struct ID3D10EffectVariable *, GetElement)(THIS_ UINT index) PURE;
-    STDMETHOD_(struct ID3D10EffectConstantBuffer *, GetParentConstantBuffer)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectScalarVariable *, AsScalar)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectVectorVariable *, AsVector)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectMatrixVariable *, AsMatrix)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectStringVariable *, AsString)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectShaderResourceVariable *, AsShaderResource)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectRenderTargetViewVariable *, AsRenderTargetView)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectDepthStencilViewVariable *, AsDepthStencilView)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectConstantBuffer *, AsConstantBuffer)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectShaderVariable *, AsShader)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectBlendVariable *, AsBlend)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectDepthStencilVariable *, AsDepthStencil)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectRasterizerVariable *, AsRasterizer)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectSamplerVariable *, AsSampler)(THIS) PURE;
-    STDMETHOD(SetRawValue)(THIS_ void *data, UINT offset, UINT count) PURE;
-    STDMETHOD(GetRawValue)(THIS_ void *data, UINT offset, UINT count) PURE;
-    /* ID3D10EffectScalarVariable methods */
-    STDMETHOD(SetFloat)(THIS_ float value) PURE;
-    STDMETHOD(GetFloat)(THIS_ float *value) PURE;
-    STDMETHOD(SetFloatArray)(THIS_ float *values, UINT offset, UINT count) PURE;
-    STDMETHOD(GetFloatArray)(THIS_ float *values, UINT offset, UINT count) PURE;
-    STDMETHOD(SetInt)(THIS_ int value) PURE;
-    STDMETHOD(GetInt)(THIS_ int *value) PURE;
-    STDMETHOD(SetIntArray)(THIS_ int *values, UINT offset, UINT count) PURE;
-    STDMETHOD(GetIntArray)(THIS_ int *values, UINT offset, UINT count) PURE;
-    STDMETHOD(SetBool)(THIS_ WINBOOL value) PURE;
-    STDMETHOD(GetBool)(THIS_ WINBOOL *value) PURE;
-    STDMETHOD(SetBoolArray)(THIS_ WINBOOL *values, UINT offset, UINT count) PURE;
-    STDMETHOD(GetBoolArray)(THIS_ WINBOOL *values, UINT offset, UINT count) PURE;
-};
-#undef INTERFACE
-
-DEFINE_GUID(IID_ID3D10EffectVectorVariable, 0x62b98c44, 0x1f82, 0x4c67, 0xbc, 0xd0, 0x72, 0xcf, 0x8f, 0x21, 0x7e, 0x81);
-
-#define INTERFACE ID3D10EffectVectorVariable
-DECLARE_INTERFACE_(ID3D10EffectVectorVariable, ID3D10EffectVariable)
-{
-    /* ID3D10EffectVariable methods */
-    STDMETHOD_(WINBOOL, IsValid)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectType *, GetType)(THIS) PURE;
-    STDMETHOD(GetDesc)(THIS_ D3D10_EFFECT_VARIABLE_DESC *desc) PURE;
-    STDMETHOD_(struct ID3D10EffectVariable *, GetAnnotationByIndex)(THIS_ UINT index) PURE;
-    STDMETHOD_(struct ID3D10EffectVariable *, GetAnnotationByName)(THIS_ const char *name) PURE;
-    STDMETHOD_(struct ID3D10EffectVariable *, GetMemberByIndex)(THIS_ UINT index) PURE;
-    STDMETHOD_(struct ID3D10EffectVariable *, GetMemberByName)(THIS_ const char *name) PURE;
-    STDMETHOD_(struct ID3D10EffectVariable *, GetMemberBySemantic)(THIS_ const char *semantic) PURE;
-    STDMETHOD_(struct ID3D10EffectVariable *, GetElement)(THIS_ UINT index) PURE;
-    STDMETHOD_(struct ID3D10EffectConstantBuffer *, GetParentConstantBuffer)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectScalarVariable *, AsScalar)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectVectorVariable *, AsVector)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectMatrixVariable *, AsMatrix)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectStringVariable *, AsString)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectShaderResourceVariable *, AsShaderResource)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectRenderTargetViewVariable *, AsRenderTargetView)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectDepthStencilViewVariable *, AsDepthStencilView)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectConstantBuffer *, AsConstantBuffer)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectShaderVariable *, AsShader)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectBlendVariable *, AsBlend)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectDepthStencilVariable *, AsDepthStencil)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectRasterizerVariable *, AsRasterizer)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectSamplerVariable *, AsSampler)(THIS) PURE;
-    STDMETHOD(SetRawValue)(THIS_ void *data, UINT offset, UINT count) PURE;
-    STDMETHOD(GetRawValue)(THIS_ void *data, UINT offset, UINT count) PURE;
-    /* ID3D10EffectVectorVariable methods */
-    STDMETHOD(SetBoolVector)(THIS_ WINBOOL *value) PURE;
-    STDMETHOD(SetIntVector)(THIS_ int *value) PURE;
-    STDMETHOD(SetFloatVector)(THIS_ float *value) PURE;
-    STDMETHOD(GetBoolVector)(THIS_ WINBOOL *value) PURE;
-    STDMETHOD(GetIntVector)(THIS_ int *value) PURE;
-    STDMETHOD(GetFloatVector)(THIS_ float *value) PURE;
-    STDMETHOD(SetBoolVectorArray)(THIS_ WINBOOL *values, UINT offset, UINT count) PURE;
-    STDMETHOD(SetIntVectorArray)(THIS_ int *values, UINT offset, UINT count) PURE;
-    STDMETHOD(SetFloatVectorArray)(THIS_ float *values, UINT offset, UINT count) PURE;
-    STDMETHOD(GetBoolVectorArray)(THIS_ WINBOOL *values, UINT offset, UINT count) PURE;
-    STDMETHOD(GetIntVectorArray)(THIS_ int *values, UINT offset, UINT count) PURE;
-    STDMETHOD(GetFloatVectorArray)(THIS_ float *values, UINT offset, UINT count) PURE;
-};
-#undef INTERFACE
-
-DEFINE_GUID(IID_ID3D10EffectMatrixVariable, 0x50666c24, 0xb82f, 0x4eed, 0xa1, 0x72, 0x5b, 0x6e, 0x7e, 0x85, 0x22, 0xe0);
-
-#define INTERFACE ID3D10EffectMatrixVariable
-DECLARE_INTERFACE_(ID3D10EffectMatrixVariable, ID3D10EffectVariable)
-{
-    /* ID3D10EffectVariable methods */
-    STDMETHOD_(WINBOOL, IsValid)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectType *, GetType)(THIS) PURE;
-    STDMETHOD(GetDesc)(THIS_ D3D10_EFFECT_VARIABLE_DESC *desc) PURE;
-    STDMETHOD_(struct ID3D10EffectVariable *, GetAnnotationByIndex)(THIS_ UINT index) PURE;
-    STDMETHOD_(struct ID3D10EffectVariable *, GetAnnotationByName)(THIS_ const char *name) PURE;
-    STDMETHOD_(struct ID3D10EffectVariable *, GetMemberByIndex)(THIS_ UINT index) PURE;
-    STDMETHOD_(struct ID3D10EffectVariable *, GetMemberByName)(THIS_ const char *name) PURE;
-    STDMETHOD_(struct ID3D10EffectVariable *, GetMemberBySemantic)(THIS_ const char *semantic) PURE;
-    STDMETHOD_(struct ID3D10EffectVariable *, GetElement)(THIS_ UINT index) PURE;
-    STDMETHOD_(struct ID3D10EffectConstantBuffer *, GetParentConstantBuffer)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectScalarVariable *, AsScalar)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectVectorVariable *, AsVector)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectMatrixVariable *, AsMatrix)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectStringVariable *, AsString)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectShaderResourceVariable *, AsShaderResource)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectRenderTargetViewVariable *, AsRenderTargetView)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectDepthStencilViewVariable *, AsDepthStencilView)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectConstantBuffer *, AsConstantBuffer)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectShaderVariable *, AsShader)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectBlendVariable *, AsBlend)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectDepthStencilVariable *, AsDepthStencil)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectRasterizerVariable *, AsRasterizer)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectSamplerVariable *, AsSampler)(THIS) PURE;
-    STDMETHOD(SetRawValue)(THIS_ void *data, UINT offset, UINT count) PURE;
-    STDMETHOD(GetRawValue)(THIS_ void *data, UINT offset, UINT count) PURE;
-    /* ID3D10EffectMatrixVariable methods */
-    STDMETHOD(SetMatrix)(THIS_ float *data) PURE;
-    STDMETHOD(GetMatrix)(THIS_ float *data) PURE;
-    STDMETHOD(SetMatrixArray)(THIS_ float *data, UINT offset, UINT count) PURE;
-    STDMETHOD(GetMatrixArray)(THIS_ float *data, UINT offset, UINT count) PURE;
-    STDMETHOD(SetMatrixTranspose)(THIS_ float *data) PURE;
-    STDMETHOD(GetMatrixTranspose)(THIS_ float *data) PURE;
-    STDMETHOD(SetMatrixTransposeArray)(THIS_ float *data, UINT offset, UINT count) PURE;
-    STDMETHOD(GetMatrixTransposeArray)(THIS_ float *data, UINT offset, UINT count) PURE;
-};
-#undef INTERFACE
-
-DEFINE_GUID(IID_ID3D10EffectStringVariable, 0x71417501, 0x8df9, 0x4e0a, 0xa7, 0x8a, 0x25, 0x5f, 0x97, 0x56, 0xba, 0xff);
-
-#define INTERFACE ID3D10EffectStringVariable
-DECLARE_INTERFACE_(ID3D10EffectStringVariable, ID3D10EffectVariable)
-{
-    /* ID3D10EffectVariable methods */
-    STDMETHOD_(WINBOOL, IsValid)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectType *, GetType)(THIS) PURE;
-    STDMETHOD(GetDesc)(THIS_ D3D10_EFFECT_VARIABLE_DESC *desc) PURE;
-    STDMETHOD_(struct ID3D10EffectVariable *, GetAnnotationByIndex)(THIS_ UINT index) PURE;
-    STDMETHOD_(struct ID3D10EffectVariable *, GetAnnotationByName)(THIS_ const char *name) PURE;
-    STDMETHOD_(struct ID3D10EffectVariable *, GetMemberByIndex)(THIS_ UINT index) PURE;
-    STDMETHOD_(struct ID3D10EffectVariable *, GetMemberByName)(THIS_ const char *name) PURE;
-    STDMETHOD_(struct ID3D10EffectVariable *, GetMemberBySemantic)(THIS_ const char *semantic) PURE;
-    STDMETHOD_(struct ID3D10EffectVariable *, GetElement)(THIS_ UINT index) PURE;
-    STDMETHOD_(struct ID3D10EffectConstantBuffer *, GetParentConstantBuffer)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectScalarVariable *, AsScalar)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectVectorVariable *, AsVector)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectMatrixVariable *, AsMatrix)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectStringVariable *, AsString)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectShaderResourceVariable *, AsShaderResource)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectRenderTargetViewVariable *, AsRenderTargetView)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectDepthStencilViewVariable *, AsDepthStencilView)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectConstantBuffer *, AsConstantBuffer)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectShaderVariable *, AsShader)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectBlendVariable *, AsBlend)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectDepthStencilVariable *, AsDepthStencil)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectRasterizerVariable *, AsRasterizer)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectSamplerVariable *, AsSampler)(THIS) PURE;
-    STDMETHOD(SetRawValue)(THIS_ void *data, UINT offset, UINT count) PURE;
-    STDMETHOD(GetRawValue)(THIS_ void *data, UINT offset, UINT count) PURE;
-    /* ID3D10EffectStringVariable methods */
-    STDMETHOD(GetString)(THIS_ const char **str) PURE;
-    STDMETHOD(GetStringArray)(THIS_ const char **strs, UINT offset, UINT count) PURE;
-};
-#undef INTERFACE
-
-DEFINE_GUID(IID_ID3D10EffectShaderResourceVariable,
-        0xc0a7157b, 0xd872, 0x4b1d, 0x80, 0x73, 0xef, 0xc2, 0xac, 0xd4, 0xb1, 0xfc);
-
-#define INTERFACE ID3D10EffectShaderResourceVariable
-DECLARE_INTERFACE_(ID3D10EffectShaderResourceVariable, ID3D10EffectVariable)
-{
-    /* ID3D10EffectVariable methods */
-    STDMETHOD_(WINBOOL, IsValid)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectType *, GetType)(THIS) PURE;
-    STDMETHOD(GetDesc)(THIS_ D3D10_EFFECT_VARIABLE_DESC *desc) PURE;
-    STDMETHOD_(struct ID3D10EffectVariable *, GetAnnotationByIndex)(THIS_ UINT index) PURE;
-    STDMETHOD_(struct ID3D10EffectVariable *, GetAnnotationByName)(THIS_ const char *name) PURE;
-    STDMETHOD_(struct ID3D10EffectVariable *, GetMemberByIndex)(THIS_ UINT index) PURE;
-    STDMETHOD_(struct ID3D10EffectVariable *, GetMemberByName)(THIS_ const char *name) PURE;
-    STDMETHOD_(struct ID3D10EffectVariable *, GetMemberBySemantic)(THIS_ const char *semantic) PURE;
-    STDMETHOD_(struct ID3D10EffectVariable *, GetElement)(THIS_ UINT index) PURE;
-    STDMETHOD_(struct ID3D10EffectConstantBuffer *, GetParentConstantBuffer)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectScalarVariable *, AsScalar)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectVectorVariable *, AsVector)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectMatrixVariable *, AsMatrix)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectStringVariable *, AsString)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectShaderResourceVariable *, AsShaderResource)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectRenderTargetViewVariable *, AsRenderTargetView)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectDepthStencilViewVariable *, AsDepthStencilView)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectConstantBuffer *, AsConstantBuffer)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectShaderVariable *, AsShader)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectBlendVariable *, AsBlend)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectDepthStencilVariable *, AsDepthStencil)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectRasterizerVariable *, AsRasterizer)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectSamplerVariable *, AsSampler)(THIS) PURE;
-    STDMETHOD(SetRawValue)(THIS_ void *data, UINT offset, UINT count) PURE;
-    STDMETHOD(GetRawValue)(THIS_ void *data, UINT offset, UINT count) PURE;
-    /* ID3D10EffectShaderResourceVariable methods */
-    STDMETHOD(SetResource)(THIS_ ID3D10ShaderResourceView *resource) PURE;
-    STDMETHOD(GetResource)(THIS_ ID3D10ShaderResourceView **resource) PURE;
-    STDMETHOD(SetResourceArray)(THIS_ ID3D10ShaderResourceView **resources, UINT offset, UINT count) PURE;
-    STDMETHOD(GetResourceArray)(THIS_ ID3D10ShaderResourceView **resources, UINT offset, UINT count) PURE;
-};
-#undef INTERFACE
-
-DEFINE_GUID(IID_ID3D10EffectRenderTargetViewVariable,
-        0x28ca0cc3, 0xc2c9, 0x40bb, 0xb5, 0x7f, 0x67, 0xb7, 0x37, 0x12, 0x2b, 0x17);
-
-#define INTERFACE ID3D10EffectRenderTargetViewVariable
-DECLARE_INTERFACE_(ID3D10EffectRenderTargetViewVariable, ID3D10EffectVariable)
-{
-    /* ID3D10EffectVariable methods */
-    STDMETHOD_(WINBOOL, IsValid)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectType *, GetType)(THIS) PURE;
-    STDMETHOD(GetDesc)(THIS_ D3D10_EFFECT_VARIABLE_DESC *desc) PURE;
-    STDMETHOD_(struct ID3D10EffectVariable *, GetAnnotationByIndex)(THIS_ UINT index) PURE;
-    STDMETHOD_(struct ID3D10EffectVariable *, GetAnnotationByName)(THIS_ const char *name) PURE;
-    STDMETHOD_(struct ID3D10EffectVariable *, GetMemberByIndex)(THIS_ UINT index) PURE;
-    STDMETHOD_(struct ID3D10EffectVariable *, GetMemberByName)(THIS_ const char *name) PURE;
-    STDMETHOD_(struct ID3D10EffectVariable *, GetMemberBySemantic)(THIS_ const char *semantic) PURE;
-    STDMETHOD_(struct ID3D10EffectVariable *, GetElement)(THIS_ UINT index) PURE;
-    STDMETHOD_(struct ID3D10EffectConstantBuffer *, GetParentConstantBuffer)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectScalarVariable *, AsScalar)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectVectorVariable *, AsVector)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectMatrixVariable *, AsMatrix)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectStringVariable *, AsString)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectShaderResourceVariable *, AsShaderResource)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectRenderTargetViewVariable *, AsRenderTargetView)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectDepthStencilViewVariable *, AsDepthStencilView)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectConstantBuffer *, AsConstantBuffer)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectShaderVariable *, AsShader)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectBlendVariable *, AsBlend)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectDepthStencilVariable *, AsDepthStencil)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectRasterizerVariable *, AsRasterizer)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectSamplerVariable *, AsSampler)(THIS) PURE;
-    STDMETHOD(SetRawValue)(THIS_ void *data, UINT offset, UINT count) PURE;
-    STDMETHOD(GetRawValue)(THIS_ void *data, UINT offset, UINT count) PURE;
-    /* ID3D10EffectRenderTargetViewVariable methods */
-    STDMETHOD(SetRenderTarget)(THIS_ ID3D10RenderTargetView *view) PURE;
-    STDMETHOD(GetRenderTarget)(THIS_ ID3D10RenderTargetView **view) PURE;
-    STDMETHOD(SetRenderTargetArray)(THIS_ ID3D10RenderTargetView **views, UINT offset, UINT count) PURE;
-    STDMETHOD(GetRenderTargetArray)(THIS_ ID3D10RenderTargetView **views, UINT offset, UINT count) PURE;
-};
-#undef INTERFACE
-
-DEFINE_GUID(IID_ID3D10EffectDepthStencilViewVariable,
-        0x3e02c918, 0xcc79, 0x4985, 0xb6, 0x22, 0x2d, 0x92, 0xad, 0x70, 0x16, 0x23);
-
-#define INTERFACE ID3D10EffectDepthStencilViewVariable
-DECLARE_INTERFACE_(ID3D10EffectDepthStencilViewVariable, ID3D10EffectVariable)
-{
-    /* ID3D10EffectVariable methods */
-    STDMETHOD_(WINBOOL, IsValid)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectType *, GetType)(THIS) PURE;
-    STDMETHOD(GetDesc)(THIS_ D3D10_EFFECT_VARIABLE_DESC *desc) PURE;
-    STDMETHOD_(struct ID3D10EffectVariable *, GetAnnotationByIndex)(THIS_ UINT index) PURE;
-    STDMETHOD_(struct ID3D10EffectVariable *, GetAnnotationByName)(THIS_ const char *name) PURE;
-    STDMETHOD_(struct ID3D10EffectVariable *, GetMemberByIndex)(THIS_ UINT index) PURE;
-    STDMETHOD_(struct ID3D10EffectVariable *, GetMemberByName)(THIS_ const char *name) PURE;
-    STDMETHOD_(struct ID3D10EffectVariable *, GetMemberBySemantic)(THIS_ const char *semantic) PURE;
-    STDMETHOD_(struct ID3D10EffectVariable *, GetElement)(THIS_ UINT index) PURE;
-    STDMETHOD_(struct ID3D10EffectConstantBuffer *, GetParentConstantBuffer)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectScalarVariable *, AsScalar)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectVectorVariable *, AsVector)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectMatrixVariable *, AsMatrix)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectStringVariable *, AsString)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectShaderResourceVariable *, AsShaderResource)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectRenderTargetViewVariable *, AsRenderTargetView)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectDepthStencilViewVariable *, AsDepthStencilView)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectConstantBuffer *, AsConstantBuffer)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectShaderVariable *, AsShader)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectBlendVariable *, AsBlend)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectDepthStencilVariable *, AsDepthStencil)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectRasterizerVariable *, AsRasterizer)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectSamplerVariable *, AsSampler)(THIS) PURE;
-    STDMETHOD(SetRawValue)(THIS_ void *data, UINT offset, UINT count) PURE;
-    STDMETHOD(GetRawValue)(THIS_ void *data, UINT offset, UINT count) PURE;
-    /* ID3D10EffectDepthStencilViewVariable methods */
-    STDMETHOD(SetDepthStencil)(THIS_ ID3D10DepthStencilView *view) PURE;
-    STDMETHOD(GetDepthStencil)(THIS_ ID3D10DepthStencilView **view) PURE;
-    STDMETHOD(SetDepthStencilArray)(THIS_ ID3D10DepthStencilView **views, UINT offset, UINT count) PURE;
-    STDMETHOD(GetDepthStencilArray)(THIS_ ID3D10DepthStencilView **views, UINT offset, UINT count) PURE;
-};
-#undef INTERFACE
-
-DEFINE_GUID(IID_ID3D10EffectShaderVariable, 0x80849279, 0xc799, 0x4797, 0x8c, 0x33, 0x04, 0x07, 0xa0, 0x7d, 0x9e, 0x06);
-
-#define INTERFACE ID3D10EffectShaderVariable
-DECLARE_INTERFACE_(ID3D10EffectShaderVariable, ID3D10EffectVariable)
-{
-    /* ID3D10EffectVariable methods */
-    STDMETHOD_(WINBOOL, IsValid)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectType *, GetType)(THIS) PURE;
-    STDMETHOD(GetDesc)(THIS_ D3D10_EFFECT_VARIABLE_DESC *desc) PURE;
-    STDMETHOD_(struct ID3D10EffectVariable *, GetAnnotationByIndex)(THIS_ UINT index) PURE;
-    STDMETHOD_(struct ID3D10EffectVariable *, GetAnnotationByName)(THIS_ const char *name) PURE;
-    STDMETHOD_(struct ID3D10EffectVariable *, GetMemberByIndex)(THIS_ UINT index) PURE;
-    STDMETHOD_(struct ID3D10EffectVariable *, GetMemberByName)(THIS_ const char *name) PURE;
-    STDMETHOD_(struct ID3D10EffectVariable *, GetMemberBySemantic)(THIS_ const char *semantic) PURE;
-    STDMETHOD_(struct ID3D10EffectVariable *, GetElement)(THIS_ UINT index) PURE;
-    STDMETHOD_(struct ID3D10EffectConstantBuffer *, GetParentConstantBuffer)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectScalarVariable *, AsScalar)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectVectorVariable *, AsVector)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectMatrixVariable *, AsMatrix)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectStringVariable *, AsString)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectShaderResourceVariable *, AsShaderResource)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectRenderTargetViewVariable *, AsRenderTargetView)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectDepthStencilViewVariable *, AsDepthStencilView)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectConstantBuffer *, AsConstantBuffer)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectShaderVariable *, AsShader)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectBlendVariable *, AsBlend)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectDepthStencilVariable *, AsDepthStencil)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectRasterizerVariable *, AsRasterizer)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectSamplerVariable *, AsSampler)(THIS) PURE;
-    STDMETHOD(SetRawValue)(THIS_ void *data, UINT offset, UINT count) PURE;
-    STDMETHOD(GetRawValue)(THIS_ void *data, UINT offset, UINT count) PURE;
-    /* ID3D10EffectShaderVariable methods */
-    STDMETHOD(GetShaderDesc)(THIS_ UINT index, D3D10_EFFECT_SHADER_DESC *desc) PURE;
-    STDMETHOD(GetVertexShader)(THIS_ UINT index, ID3D10VertexShader **shader) PURE;
-    STDMETHOD(GetGeometryShader)(THIS_ UINT index, ID3D10GeometryShader **shader) PURE;
-    STDMETHOD(GetPixelShader)(THIS_ UINT index, ID3D10PixelShader **shader) PURE;
-    STDMETHOD(GetInputSignatureElementDesc)(THIS_ UINT shader_index, UINT element_index,
-            D3D10_SIGNATURE_PARAMETER_DESC *desc) PURE;
-    STDMETHOD(GetOutputSignatureElementDesc)(THIS_ UINT shader_index, UINT element_index,
-            D3D10_SIGNATURE_PARAMETER_DESC *desc) PURE;
-};
-#undef INTERFACE
-
-DEFINE_GUID(IID_ID3D10EffectBlendVariable, 0x1fcd2294, 0xdf6d, 0x4eae, 0x86, 0xb3, 0x0e, 0x91, 0x60, 0xcf, 0xb0, 0x7b);
-
-#define INTERFACE ID3D10EffectBlendVariable
-DECLARE_INTERFACE_(ID3D10EffectBlendVariable, ID3D10EffectVariable)
-{
-    /* ID3D10EffectVariable methods */
-    STDMETHOD_(WINBOOL, IsValid)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectType *, GetType)(THIS) PURE;
-    STDMETHOD(GetDesc)(THIS_ D3D10_EFFECT_VARIABLE_DESC *desc) PURE;
-    STDMETHOD_(struct ID3D10EffectVariable *, GetAnnotationByIndex)(THIS_ UINT index) PURE;
-    STDMETHOD_(struct ID3D10EffectVariable *, GetAnnotationByName)(THIS_ const char *name) PURE;
-    STDMETHOD_(struct ID3D10EffectVariable *, GetMemberByIndex)(THIS_ UINT index) PURE;
-    STDMETHOD_(struct ID3D10EffectVariable *, GetMemberByName)(THIS_ const char *name) PURE;
-    STDMETHOD_(struct ID3D10EffectVariable *, GetMemberBySemantic)(THIS_ const char *semantic) PURE;
-    STDMETHOD_(struct ID3D10EffectVariable *, GetElement)(THIS_ UINT index) PURE;
-    STDMETHOD_(struct ID3D10EffectConstantBuffer *, GetParentConstantBuffer)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectScalarVariable *, AsScalar)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectVectorVariable *, AsVector)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectMatrixVariable *, AsMatrix)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectStringVariable *, AsString)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectShaderResourceVariable *, AsShaderResource)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectRenderTargetViewVariable *, AsRenderTargetView)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectDepthStencilViewVariable *, AsDepthStencilView)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectConstantBuffer *, AsConstantBuffer)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectShaderVariable *, AsShader)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectBlendVariable *, AsBlend)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectDepthStencilVariable *, AsDepthStencil)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectRasterizerVariable *, AsRasterizer)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectSamplerVariable *, AsSampler)(THIS) PURE;
-    STDMETHOD(SetRawValue)(THIS_ void *data, UINT offset, UINT count) PURE;
-    STDMETHOD(GetRawValue)(THIS_ void *data, UINT offset, UINT count) PURE;
-    /* ID3D10EffectBlendVariable methods */
-    STDMETHOD(GetBlendState)(THIS_ UINT index, ID3D10BlendState **blend_state) PURE;
-    STDMETHOD(GetBackingStore)(THIS_ UINT index, D3D10_BLEND_DESC *desc) PURE;
-};
-#undef INTERFACE
-
-DEFINE_GUID(IID_ID3D10EffectDepthStencilVariable,
-        0xaf482368, 0x330a, 0x46a5, 0x9a, 0x5c, 0x01, 0xc7, 0x1a, 0xf2, 0x4c, 0x8d);
-
-#define INTERFACE ID3D10EffectDepthStencilVariable
-DECLARE_INTERFACE_(ID3D10EffectDepthStencilVariable, ID3D10EffectVariable)
-{
-    /* ID3D10EffectVariable methods */
-    STDMETHOD_(WINBOOL, IsValid)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectType *, GetType)(THIS) PURE;
-    STDMETHOD(GetDesc)(THIS_ D3D10_EFFECT_VARIABLE_DESC *desc) PURE;
-    STDMETHOD_(struct ID3D10EffectVariable *, GetAnnotationByIndex)(THIS_ UINT index) PURE;
-    STDMETHOD_(struct ID3D10EffectVariable *, GetAnnotationByName)(THIS_ const char *name) PURE;
-    STDMETHOD_(struct ID3D10EffectVariable *, GetMemberByIndex)(THIS_ UINT index) PURE;
-    STDMETHOD_(struct ID3D10EffectVariable *, GetMemberByName)(THIS_ const char *name) PURE;
-    STDMETHOD_(struct ID3D10EffectVariable *, GetMemberBySemantic)(THIS_ const char *semantic) PURE;
-    STDMETHOD_(struct ID3D10EffectVariable *, GetElement)(THIS_ UINT index) PURE;
-    STDMETHOD_(struct ID3D10EffectConstantBuffer *, GetParentConstantBuffer)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectScalarVariable *, AsScalar)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectVectorVariable *, AsVector)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectMatrixVariable *, AsMatrix)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectStringVariable *, AsString)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectShaderResourceVariable *, AsShaderResource)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectRenderTargetViewVariable *, AsRenderTargetView)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectDepthStencilViewVariable *, AsDepthStencilView)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectConstantBuffer *, AsConstantBuffer)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectShaderVariable *, AsShader)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectBlendVariable *, AsBlend)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectDepthStencilVariable *, AsDepthStencil)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectRasterizerVariable *, AsRasterizer)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectSamplerVariable *, AsSampler)(THIS) PURE;
-    STDMETHOD(SetRawValue)(THIS_ void *data, UINT offset, UINT count) PURE;
-    STDMETHOD(GetRawValue)(THIS_ void *data, UINT offset, UINT count) PURE;
-    /* ID3D10EffectDepthStencilVariable methods */
-    STDMETHOD(GetDepthStencilState)(THIS_ UINT index, ID3D10DepthStencilState **depth_stencil_state) PURE;
-    STDMETHOD(GetBackingStore)(THIS_ UINT index, D3D10_DEPTH_STENCIL_DESC *desc) PURE;
-};
-#undef INTERFACE
-
-DEFINE_GUID(IID_ID3D10EffectRasterizerVariable,
-        0x21af9f0e, 0x4d94, 0x4ea9, 0x97, 0x85, 0x2c, 0xb7, 0x6b, 0x8c, 0x0b, 0x34);
-
-#define INTERFACE ID3D10EffectRasterizerVariable
-DECLARE_INTERFACE_(ID3D10EffectRasterizerVariable, ID3D10EffectVariable)
-{
-    /* ID3D10EffectVariable methods */
-    STDMETHOD_(WINBOOL, IsValid)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectType *, GetType)(THIS) PURE;
-    STDMETHOD(GetDesc)(THIS_ D3D10_EFFECT_VARIABLE_DESC *desc) PURE;
-    STDMETHOD_(struct ID3D10EffectVariable *, GetAnnotationByIndex)(THIS_ UINT index) PURE;
-    STDMETHOD_(struct ID3D10EffectVariable *, GetAnnotationByName)(THIS_ const char *name) PURE;
-    STDMETHOD_(struct ID3D10EffectVariable *, GetMemberByIndex)(THIS_ UINT index) PURE;
-    STDMETHOD_(struct ID3D10EffectVariable *, GetMemberByName)(THIS_ const char *name) PURE;
-    STDMETHOD_(struct ID3D10EffectVariable *, GetMemberBySemantic)(THIS_ const char *semantic) PURE;
-    STDMETHOD_(struct ID3D10EffectVariable *, GetElement)(THIS_ UINT index) PURE;
-    STDMETHOD_(struct ID3D10EffectConstantBuffer *, GetParentConstantBuffer)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectScalarVariable *, AsScalar)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectVectorVariable *, AsVector)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectMatrixVariable *, AsMatrix)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectStringVariable *, AsString)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectShaderResourceVariable *, AsShaderResource)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectRenderTargetViewVariable *, AsRenderTargetView)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectDepthStencilViewVariable *, AsDepthStencilView)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectConstantBuffer *, AsConstantBuffer)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectShaderVariable *, AsShader)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectBlendVariable *, AsBlend)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectDepthStencilVariable *, AsDepthStencil)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectRasterizerVariable *, AsRasterizer)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectSamplerVariable *, AsSampler)(THIS) PURE;
-    STDMETHOD(SetRawValue)(THIS_ void *data, UINT offset, UINT count) PURE;
-    STDMETHOD(GetRawValue)(THIS_ void *data, UINT offset, UINT count) PURE;
-    /* ID3D10EffectRasterizerVariable methods */
-    STDMETHOD(GetRasterizerState)(THIS_ UINT index, ID3D10RasterizerState **rasterizer_state) PURE;
-    STDMETHOD(GetBackingStore)(THIS_ UINT index, D3D10_RASTERIZER_DESC *desc) PURE;
-};
-#undef INTERFACE
-
-DEFINE_GUID(IID_ID3D10EffectSamplerVariable,
-        0x6530d5c7, 0x07e9, 0x4271, 0xa4, 0x18, 0xe7, 0xce, 0x4b, 0xd1, 0xe4, 0x80);
-
-#define INTERFACE ID3D10EffectSamplerVariable
-DECLARE_INTERFACE_(ID3D10EffectSamplerVariable, ID3D10EffectVariable)
-{
-    /* ID3D10EffectVariable methods */
-    STDMETHOD_(WINBOOL, IsValid)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectType *, GetType)(THIS) PURE;
-    STDMETHOD(GetDesc)(THIS_ D3D10_EFFECT_VARIABLE_DESC *desc) PURE;
-    STDMETHOD_(struct ID3D10EffectVariable *, GetAnnotationByIndex)(THIS_ UINT index) PURE;
-    STDMETHOD_(struct ID3D10EffectVariable *, GetAnnotationByName)(THIS_ const char *name) PURE;
-    STDMETHOD_(struct ID3D10EffectVariable *, GetMemberByIndex)(THIS_ UINT index) PURE;
-    STDMETHOD_(struct ID3D10EffectVariable *, GetMemberByName)(THIS_ const char *name) PURE;
-    STDMETHOD_(struct ID3D10EffectVariable *, GetMemberBySemantic)(THIS_ const char *semantic) PURE;
-    STDMETHOD_(struct ID3D10EffectVariable *, GetElement)(THIS_ UINT index) PURE;
-    STDMETHOD_(struct ID3D10EffectConstantBuffer *, GetParentConstantBuffer)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectScalarVariable *, AsScalar)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectVectorVariable *, AsVector)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectMatrixVariable *, AsMatrix)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectStringVariable *, AsString)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectShaderResourceVariable *, AsShaderResource)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectRenderTargetViewVariable *, AsRenderTargetView)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectDepthStencilViewVariable *, AsDepthStencilView)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectConstantBuffer *, AsConstantBuffer)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectShaderVariable *, AsShader)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectBlendVariable *, AsBlend)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectDepthStencilVariable *, AsDepthStencil)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectRasterizerVariable *, AsRasterizer)(THIS) PURE;
-    STDMETHOD_(struct ID3D10EffectSamplerVariable *, AsSampler)(THIS) PURE;
-    STDMETHOD(SetRawValue)(THIS_ void *data, UINT offset, UINT count) PURE;
-    STDMETHOD(GetRawValue)(THIS_ void *data, UINT offset, UINT count) PURE;
-    /* ID3D10EffectSamplerVariable methods */
-    STDMETHOD(GetSampler)(THIS_ UINT index, ID3D10SamplerState **sampler) PURE;
-    STDMETHOD(GetBackingStore)(THIS_ UINT index, D3D10_SAMPLER_DESC *desc) PURE;
-};
-#undef INTERFACE
-
-DEFINE_GUID(IID_ID3D10EffectTechnique, 0xdb122ce8, 0xd1c9, 0x4292, 0xb2, 0x37, 0x24, 0xed, 0x3d, 0xe8, 0xb1, 0x75);
-
-#define INTERFACE ID3D10EffectTechnique
-DECLARE_INTERFACE(ID3D10EffectTechnique)
-{
-    STDMETHOD_(WINBOOL, IsValid)(THIS) PURE;
-    STDMETHOD(GetDesc)(THIS_ D3D10_TECHNIQUE_DESC *desc) PURE;
-    STDMETHOD_(struct ID3D10EffectVariable *, GetAnnotationByIndex)(THIS_ UINT index) PURE;
-    STDMETHOD_(struct ID3D10EffectVariable *, GetAnnotationByName)(THIS_ const char *name) PURE;
-    STDMETHOD_(struct ID3D10EffectPass *, GetPassByIndex)(THIS_ UINT index) PURE;
-    STDMETHOD_(struct ID3D10EffectPass *, GetPassByName)(THIS_ const char *name) PURE;
-    STDMETHOD(ComputeStateBlockMask)(THIS_ D3D10_STATE_BLOCK_MASK *mask) PURE;
-};
-#undef INTERFACE
-
-DEFINE_GUID(IID_ID3D10Effect, 0x51b0ca8b, 0xec0b, 0x4519, 0x87, 0x0d, 0x8e, 0xe1, 0xcb, 0x50, 0x17, 0xc7);
-
-#define INTERFACE ID3D10Effect
-DECLARE_INTERFACE_(ID3D10Effect, IUnknown)
-{
-    /* IUnknown methods */
-    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **out) PURE;
-    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
-    STDMETHOD_(ULONG, Release)(THIS) PURE;
-    /* ID3D10Effect methods */
-    STDMETHOD_(WINBOOL, IsValid)(THIS) PURE;
-    STDMETHOD_(WINBOOL, IsPool)(THIS) PURE;
-    STDMETHOD(GetDevice)(THIS_ ID3D10Device **device) PURE;
-    STDMETHOD(GetDesc)(THIS_ D3D10_EFFECT_DESC *desc) PURE;
-    STDMETHOD_(struct ID3D10EffectConstantBuffer *, GetConstantBufferByIndex)(THIS_ UINT index) PURE;
-    STDMETHOD_(struct ID3D10EffectConstantBuffer *, GetConstantBufferByName)(THIS_ const char *name) PURE;
-    STDMETHOD_(struct ID3D10EffectVariable *, GetVariableByIndex)(THIS_ UINT index) PURE;
-    STDMETHOD_(struct ID3D10EffectVariable *, GetVariableByName)(THIS_ const char *name) PURE;
-    STDMETHOD_(struct ID3D10EffectVariable *, GetVariableBySemantic)(THIS_ const char *semantic) PURE;
-    STDMETHOD_(struct ID3D10EffectTechnique *, GetTechniqueByIndex)(THIS_ UINT index) PURE;
-    STDMETHOD_(struct ID3D10EffectTechnique *, GetTechniqueByName)(THIS_ const char *name) PURE;
-    STDMETHOD(Optimize)(THIS) PURE;
-    STDMETHOD_(WINBOOL, IsOptimized)(THIS) PURE;
-};
-#undef INTERFACE
-
-DEFINE_GUID(IID_ID3D10EffectPool, 0x9537ab04, 0x3250, 0x412e, 0x82, 0x13, 0xfc, 0xd2, 0xf8, 0x67, 0x79, 0x33);
-
-#define INTERFACE ID3D10EffectPool
-DECLARE_INTERFACE_(ID3D10EffectPool, IUnknown)
-{
-    /* IUnknown methods */
-    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **out) PURE;
-    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
-    STDMETHOD_(ULONG, Release)(THIS) PURE;
-    /* ID3D10EffectPool methods */
-    STDMETHOD_(struct ID3D10Effect *, AsEffect)(THIS) PURE;
-};
-#undef INTERFACE
-
-DEFINE_GUID(IID_ID3D10EffectPass, 0x5cfbeb89, 0x1a06, 0x46e0, 0xb2, 0x82, 0xe3, 0xf9, 0xbf, 0xa3, 0x6a, 0x54);
-
-#define INTERFACE ID3D10EffectPass
-DECLARE_INTERFACE(ID3D10EffectPass)
-{
-    STDMETHOD_(WINBOOL, IsValid)(THIS) PURE;
-    STDMETHOD(GetDesc)(THIS_ D3D10_PASS_DESC *desc) PURE;
-    STDMETHOD(GetVertexShaderDesc)(THIS_ D3D10_PASS_SHADER_DESC *desc) PURE;
-    STDMETHOD(GetGeometryShaderDesc)(THIS_ D3D10_PASS_SHADER_DESC *desc) PURE;
-    STDMETHOD(GetPixelShaderDesc)(THIS_ D3D10_PASS_SHADER_DESC *desc) PURE;
-    STDMETHOD_(struct ID3D10EffectVariable *, GetAnnotationByIndex)(THIS_ UINT index) PURE;
-    STDMETHOD_(struct ID3D10EffectVariable *, GetAnnotationByName)(THIS_ const char *name) PURE;
-    STDMETHOD(Apply)(THIS_ UINT flags) PURE;
-    STDMETHOD(ComputeStateBlockMask)(THIS_ D3D10_STATE_BLOCK_MASK *mask) PURE;
-};
-#undef INTERFACE
-
-DEFINE_GUID(IID_ID3D10StateBlock, 0x0803425a, 0x57f5, 0x4dd6, 0x94, 0x65, 0xa8, 0x75, 0x70, 0x83, 0x4a, 0x08);
-
-#define INTERFACE ID3D10StateBlock
-DECLARE_INTERFACE_(ID3D10StateBlock, IUnknown)
-{
-    /* IUnknown methods */
-    STDMETHOD(QueryInterface)(THIS_ REFIID iid, void **object) PURE;
-    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
-    STDMETHOD_(ULONG, Release)(THIS) PURE;
-    /* ID3D10StateBlock methods */
-    STDMETHOD(Capture)(THIS) PURE;
-    STDMETHOD(Apply)(THIS) PURE;
-    STDMETHOD(ReleaseAllDeviceObjects)(THIS) PURE;
-    STDMETHOD(GetDevice)(THIS_ ID3D10Device **device) PURE;
-};
-#undef INTERFACE
-
-#ifdef __cplusplus
-extern "C" {
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** ID3D10EffectType methods ***/
+#define ID3D10EffectType_IsValid(This) (This)->lpVtbl->IsValid(This)
+#define ID3D10EffectType_GetDesc(This,desc) (This)->lpVtbl->GetDesc(This,desc)
+#define ID3D10EffectType_GetMemberTypeByIndex(This,index) (This)->lpVtbl->GetMemberTypeByIndex(This,index)
+#define ID3D10EffectType_GetMemberTypeByName(This,name) (This)->lpVtbl->GetMemberTypeByName(This,name)
+#define ID3D10EffectType_GetMemberTypeBySemantic(This,semantic) (This)->lpVtbl->GetMemberTypeBySemantic(This,semantic)
+#define ID3D10EffectType_GetMemberName(This,index) (This)->lpVtbl->GetMemberName(This,index)
+#define ID3D10EffectType_GetMemberSemantic(This,index) (This)->lpVtbl->GetMemberSemantic(This,index)
+#else
+/*** ID3D10EffectType methods ***/
+static __WIDL_INLINE WINBOOL ID3D10EffectType_IsValid(ID3D10EffectType* This) {
+    return This->lpVtbl->IsValid(This);
+}
+static __WIDL_INLINE HRESULT ID3D10EffectType_GetDesc(ID3D10EffectType* This,D3D10_EFFECT_TYPE_DESC *desc) {
+    return This->lpVtbl->GetDesc(This,desc);
+}
+static __WIDL_INLINE ID3D10EffectType * ID3D10EffectType_GetMemberTypeByIndex(ID3D10EffectType* This,UINT index) {
+    return This->lpVtbl->GetMemberTypeByIndex(This,index);
+}
+static __WIDL_INLINE ID3D10EffectType * ID3D10EffectType_GetMemberTypeByName(ID3D10EffectType* This,const char *name) {
+    return This->lpVtbl->GetMemberTypeByName(This,name);
+}
+static __WIDL_INLINE ID3D10EffectType * ID3D10EffectType_GetMemberTypeBySemantic(ID3D10EffectType* This,const char *semantic) {
+    return This->lpVtbl->GetMemberTypeBySemantic(This,semantic);
+}
+static __WIDL_INLINE const char * ID3D10EffectType_GetMemberName(ID3D10EffectType* This,UINT index) {
+    return This->lpVtbl->GetMemberName(This,index);
+}
+static __WIDL_INLINE const char * ID3D10EffectType_GetMemberSemantic(ID3D10EffectType* This,UINT index) {
+    return This->lpVtbl->GetMemberSemantic(This,index);
+}
+#endif
 #endif
 
-HRESULT WINAPI D3D10CompileEffectFromMemory(void *data, SIZE_T data_size, const char *filename,
-        const D3D10_SHADER_MACRO *defines, ID3D10Include *include, UINT hlsl_flags, UINT fx_flags,
-        ID3D10Blob **effect, ID3D10Blob **errors);
-HRESULT WINAPI D3D10CreateEffectFromMemory(void *data, SIZE_T data_size, UINT flags,
-        ID3D10Device *device, ID3D10EffectPool *effect_pool, ID3D10Effect **effect);
-HRESULT WINAPI D3D10CreateEffectPoolFromMemory(void *data, SIZE_T data_size, UINT fx_flags,
-        ID3D10Device *device, ID3D10EffectPool **effect_pool);
-HRESULT WINAPI D3D10CreateStateBlock(ID3D10Device *device,
-        D3D10_STATE_BLOCK_MASK *mask, ID3D10StateBlock **stateblock);
+#endif
 
-HRESULT WINAPI D3D10StateBlockMaskDifference(D3D10_STATE_BLOCK_MASK *mask_x,
-        D3D10_STATE_BLOCK_MASK *mask_y, D3D10_STATE_BLOCK_MASK *result);
-HRESULT WINAPI D3D10StateBlockMaskDisableAll(D3D10_STATE_BLOCK_MASK *mask);
-HRESULT WINAPI D3D10StateBlockMaskDisableCapture(D3D10_STATE_BLOCK_MASK *mask,
-        D3D10_DEVICE_STATE_TYPES state_type, UINT start_idx, UINT count);
-HRESULT WINAPI D3D10StateBlockMaskEnableAll(D3D10_STATE_BLOCK_MASK *mask);
-HRESULT WINAPI D3D10StateBlockMaskEnableCapture(D3D10_STATE_BLOCK_MASK *mask,
-        D3D10_DEVICE_STATE_TYPES state_type, UINT start_idx, UINT count);
-WINBOOL WINAPI D3D10StateBlockMaskGetSetting(D3D10_STATE_BLOCK_MASK *mask,
-        D3D10_DEVICE_STATE_TYPES state_type, UINT idx);
-HRESULT WINAPI D3D10StateBlockMaskIntersect(D3D10_STATE_BLOCK_MASK *mask_x,
-        D3D10_STATE_BLOCK_MASK *mask_y, D3D10_STATE_BLOCK_MASK *result);
-HRESULT WINAPI D3D10StateBlockMaskUnion(D3D10_STATE_BLOCK_MASK *mask_x,
-        D3D10_STATE_BLOCK_MASK *mask_y, D3D10_STATE_BLOCK_MASK *result);
+
+#endif  /* __ID3D10EffectType_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * ID3D10EffectVariable interface
+ */
+#ifndef __ID3D10EffectVariable_INTERFACE_DEFINED__
+#define __ID3D10EffectVariable_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_ID3D10EffectVariable, 0xae897105, 0x00e6, 0x45bf, 0xbb,0x8e, 0x28,0x1d,0xd6,0xdb,0x8e,0x1b);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("ae897105-00e6-45bf-bb8e-281dd6db8e1b")
+ID3D10EffectVariable
+{
+
+    BEGIN_INTERFACE
+
+    virtual WINBOOL STDMETHODCALLTYPE IsValid(
+        ) = 0;
+
+    virtual ID3D10EffectType * STDMETHODCALLTYPE GetType(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetDesc(
+        D3D10_EFFECT_VARIABLE_DESC *desc) = 0;
+
+    virtual ID3D10EffectVariable * STDMETHODCALLTYPE GetAnnotationByIndex(
+        UINT index) = 0;
+
+    virtual ID3D10EffectVariable * STDMETHODCALLTYPE GetAnnotationByName(
+        const char *name) = 0;
+
+    virtual ID3D10EffectVariable * STDMETHODCALLTYPE GetMemberByIndex(
+        UINT index) = 0;
+
+    virtual ID3D10EffectVariable * STDMETHODCALLTYPE GetMemberByName(
+        const char *name) = 0;
+
+    virtual ID3D10EffectVariable * STDMETHODCALLTYPE GetMemberBySemantic(
+        const char *semantic) = 0;
+
+    virtual ID3D10EffectVariable * STDMETHODCALLTYPE GetElement(
+        UINT index) = 0;
+
+    virtual ID3D10EffectConstantBuffer * STDMETHODCALLTYPE GetParentConstantBuffer(
+        ) = 0;
+
+    virtual ID3D10EffectScalarVariable * STDMETHODCALLTYPE AsScalar(
+        ) = 0;
+
+    virtual ID3D10EffectVectorVariable * STDMETHODCALLTYPE AsVector(
+        ) = 0;
+
+    virtual ID3D10EffectMatrixVariable * STDMETHODCALLTYPE AsMatrix(
+        ) = 0;
+
+    virtual ID3D10EffectStringVariable * STDMETHODCALLTYPE AsString(
+        ) = 0;
+
+    virtual ID3D10EffectShaderResourceVariable * STDMETHODCALLTYPE AsShaderResource(
+        ) = 0;
+
+    virtual ID3D10EffectRenderTargetViewVariable * STDMETHODCALLTYPE AsRenderTargetView(
+        ) = 0;
+
+    virtual ID3D10EffectDepthStencilViewVariable * STDMETHODCALLTYPE AsDepthStencilView(
+        ) = 0;
+
+    virtual ID3D10EffectConstantBuffer * STDMETHODCALLTYPE AsConstantBuffer(
+        ) = 0;
+
+    virtual ID3D10EffectShaderVariable * STDMETHODCALLTYPE AsShader(
+        ) = 0;
+
+    virtual ID3D10EffectBlendVariable * STDMETHODCALLTYPE AsBlend(
+        ) = 0;
+
+    virtual ID3D10EffectDepthStencilVariable * STDMETHODCALLTYPE AsDepthStencil(
+        ) = 0;
+
+    virtual ID3D10EffectRasterizerVariable * STDMETHODCALLTYPE AsRasterizer(
+        ) = 0;
+
+    virtual ID3D10EffectSamplerVariable * STDMETHODCALLTYPE AsSampler(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetRawValue(
+        void *data,
+        UINT offset,
+        UINT count) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetRawValue(
+        void *data,
+        UINT offset,
+        UINT count) = 0;
+
+    END_INTERFACE
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(ID3D10EffectVariable, 0xae897105, 0x00e6, 0x45bf, 0xbb,0x8e, 0x28,0x1d,0xd6,0xdb,0x8e,0x1b)
+#endif
+#else
+typedef struct ID3D10EffectVariableVtbl {
+    BEGIN_INTERFACE
+
+    /*** ID3D10EffectVariable methods ***/
+    WINBOOL (STDMETHODCALLTYPE *IsValid)(
+        ID3D10EffectVariable *This);
+
+    ID3D10EffectType * (STDMETHODCALLTYPE *GetType)(
+        ID3D10EffectVariable *This);
+
+    HRESULT (STDMETHODCALLTYPE *GetDesc)(
+        ID3D10EffectVariable *This,
+        D3D10_EFFECT_VARIABLE_DESC *desc);
+
+    ID3D10EffectVariable * (STDMETHODCALLTYPE *GetAnnotationByIndex)(
+        ID3D10EffectVariable *This,
+        UINT index);
+
+    ID3D10EffectVariable * (STDMETHODCALLTYPE *GetAnnotationByName)(
+        ID3D10EffectVariable *This,
+        const char *name);
+
+    ID3D10EffectVariable * (STDMETHODCALLTYPE *GetMemberByIndex)(
+        ID3D10EffectVariable *This,
+        UINT index);
+
+    ID3D10EffectVariable * (STDMETHODCALLTYPE *GetMemberByName)(
+        ID3D10EffectVariable *This,
+        const char *name);
+
+    ID3D10EffectVariable * (STDMETHODCALLTYPE *GetMemberBySemantic)(
+        ID3D10EffectVariable *This,
+        const char *semantic);
+
+    ID3D10EffectVariable * (STDMETHODCALLTYPE *GetElement)(
+        ID3D10EffectVariable *This,
+        UINT index);
+
+    ID3D10EffectConstantBuffer * (STDMETHODCALLTYPE *GetParentConstantBuffer)(
+        ID3D10EffectVariable *This);
+
+    ID3D10EffectScalarVariable * (STDMETHODCALLTYPE *AsScalar)(
+        ID3D10EffectVariable *This);
+
+    ID3D10EffectVectorVariable * (STDMETHODCALLTYPE *AsVector)(
+        ID3D10EffectVariable *This);
+
+    ID3D10EffectMatrixVariable * (STDMETHODCALLTYPE *AsMatrix)(
+        ID3D10EffectVariable *This);
+
+    ID3D10EffectStringVariable * (STDMETHODCALLTYPE *AsString)(
+        ID3D10EffectVariable *This);
+
+    ID3D10EffectShaderResourceVariable * (STDMETHODCALLTYPE *AsShaderResource)(
+        ID3D10EffectVariable *This);
+
+    ID3D10EffectRenderTargetViewVariable * (STDMETHODCALLTYPE *AsRenderTargetView)(
+        ID3D10EffectVariable *This);
+
+    ID3D10EffectDepthStencilViewVariable * (STDMETHODCALLTYPE *AsDepthStencilView)(
+        ID3D10EffectVariable *This);
+
+    ID3D10EffectConstantBuffer * (STDMETHODCALLTYPE *AsConstantBuffer)(
+        ID3D10EffectVariable *This);
+
+    ID3D10EffectShaderVariable * (STDMETHODCALLTYPE *AsShader)(
+        ID3D10EffectVariable *This);
+
+    ID3D10EffectBlendVariable * (STDMETHODCALLTYPE *AsBlend)(
+        ID3D10EffectVariable *This);
+
+    ID3D10EffectDepthStencilVariable * (STDMETHODCALLTYPE *AsDepthStencil)(
+        ID3D10EffectVariable *This);
+
+    ID3D10EffectRasterizerVariable * (STDMETHODCALLTYPE *AsRasterizer)(
+        ID3D10EffectVariable *This);
+
+    ID3D10EffectSamplerVariable * (STDMETHODCALLTYPE *AsSampler)(
+        ID3D10EffectVariable *This);
+
+    HRESULT (STDMETHODCALLTYPE *SetRawValue)(
+        ID3D10EffectVariable *This,
+        void *data,
+        UINT offset,
+        UINT count);
+
+    HRESULT (STDMETHODCALLTYPE *GetRawValue)(
+        ID3D10EffectVariable *This,
+        void *data,
+        UINT offset,
+        UINT count);
+
+    END_INTERFACE
+} ID3D10EffectVariableVtbl;
+
+interface ID3D10EffectVariable {
+    CONST_VTBL ID3D10EffectVariableVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** ID3D10EffectVariable methods ***/
+#define ID3D10EffectVariable_IsValid(This) (This)->lpVtbl->IsValid(This)
+#define ID3D10EffectVariable_GetType(This) (This)->lpVtbl->GetType(This)
+#define ID3D10EffectVariable_GetDesc(This,desc) (This)->lpVtbl->GetDesc(This,desc)
+#define ID3D10EffectVariable_GetAnnotationByIndex(This,index) (This)->lpVtbl->GetAnnotationByIndex(This,index)
+#define ID3D10EffectVariable_GetAnnotationByName(This,name) (This)->lpVtbl->GetAnnotationByName(This,name)
+#define ID3D10EffectVariable_GetMemberByIndex(This,index) (This)->lpVtbl->GetMemberByIndex(This,index)
+#define ID3D10EffectVariable_GetMemberByName(This,name) (This)->lpVtbl->GetMemberByName(This,name)
+#define ID3D10EffectVariable_GetMemberBySemantic(This,semantic) (This)->lpVtbl->GetMemberBySemantic(This,semantic)
+#define ID3D10EffectVariable_GetElement(This,index) (This)->lpVtbl->GetElement(This,index)
+#define ID3D10EffectVariable_GetParentConstantBuffer(This) (This)->lpVtbl->GetParentConstantBuffer(This)
+#define ID3D10EffectVariable_AsScalar(This) (This)->lpVtbl->AsScalar(This)
+#define ID3D10EffectVariable_AsVector(This) (This)->lpVtbl->AsVector(This)
+#define ID3D10EffectVariable_AsMatrix(This) (This)->lpVtbl->AsMatrix(This)
+#define ID3D10EffectVariable_AsString(This) (This)->lpVtbl->AsString(This)
+#define ID3D10EffectVariable_AsShaderResource(This) (This)->lpVtbl->AsShaderResource(This)
+#define ID3D10EffectVariable_AsRenderTargetView(This) (This)->lpVtbl->AsRenderTargetView(This)
+#define ID3D10EffectVariable_AsDepthStencilView(This) (This)->lpVtbl->AsDepthStencilView(This)
+#define ID3D10EffectVariable_AsConstantBuffer(This) (This)->lpVtbl->AsConstantBuffer(This)
+#define ID3D10EffectVariable_AsShader(This) (This)->lpVtbl->AsShader(This)
+#define ID3D10EffectVariable_AsBlend(This) (This)->lpVtbl->AsBlend(This)
+#define ID3D10EffectVariable_AsDepthStencil(This) (This)->lpVtbl->AsDepthStencil(This)
+#define ID3D10EffectVariable_AsRasterizer(This) (This)->lpVtbl->AsRasterizer(This)
+#define ID3D10EffectVariable_AsSampler(This) (This)->lpVtbl->AsSampler(This)
+#define ID3D10EffectVariable_SetRawValue(This,data,offset,count) (This)->lpVtbl->SetRawValue(This,data,offset,count)
+#define ID3D10EffectVariable_GetRawValue(This,data,offset,count) (This)->lpVtbl->GetRawValue(This,data,offset,count)
+#else
+/*** ID3D10EffectVariable methods ***/
+static __WIDL_INLINE WINBOOL ID3D10EffectVariable_IsValid(ID3D10EffectVariable* This) {
+    return This->lpVtbl->IsValid(This);
+}
+static __WIDL_INLINE ID3D10EffectType * ID3D10EffectVariable_GetType(ID3D10EffectVariable* This) {
+    return This->lpVtbl->GetType(This);
+}
+static __WIDL_INLINE HRESULT ID3D10EffectVariable_GetDesc(ID3D10EffectVariable* This,D3D10_EFFECT_VARIABLE_DESC *desc) {
+    return This->lpVtbl->GetDesc(This,desc);
+}
+static __WIDL_INLINE ID3D10EffectVariable * ID3D10EffectVariable_GetAnnotationByIndex(ID3D10EffectVariable* This,UINT index) {
+    return This->lpVtbl->GetAnnotationByIndex(This,index);
+}
+static __WIDL_INLINE ID3D10EffectVariable * ID3D10EffectVariable_GetAnnotationByName(ID3D10EffectVariable* This,const char *name) {
+    return This->lpVtbl->GetAnnotationByName(This,name);
+}
+static __WIDL_INLINE ID3D10EffectVariable * ID3D10EffectVariable_GetMemberByIndex(ID3D10EffectVariable* This,UINT index) {
+    return This->lpVtbl->GetMemberByIndex(This,index);
+}
+static __WIDL_INLINE ID3D10EffectVariable * ID3D10EffectVariable_GetMemberByName(ID3D10EffectVariable* This,const char *name) {
+    return This->lpVtbl->GetMemberByName(This,name);
+}
+static __WIDL_INLINE ID3D10EffectVariable * ID3D10EffectVariable_GetMemberBySemantic(ID3D10EffectVariable* This,const char *semantic) {
+    return This->lpVtbl->GetMemberBySemantic(This,semantic);
+}
+static __WIDL_INLINE ID3D10EffectVariable * ID3D10EffectVariable_GetElement(ID3D10EffectVariable* This,UINT index) {
+    return This->lpVtbl->GetElement(This,index);
+}
+static __WIDL_INLINE ID3D10EffectConstantBuffer * ID3D10EffectVariable_GetParentConstantBuffer(ID3D10EffectVariable* This) {
+    return This->lpVtbl->GetParentConstantBuffer(This);
+}
+static __WIDL_INLINE ID3D10EffectScalarVariable * ID3D10EffectVariable_AsScalar(ID3D10EffectVariable* This) {
+    return This->lpVtbl->AsScalar(This);
+}
+static __WIDL_INLINE ID3D10EffectVectorVariable * ID3D10EffectVariable_AsVector(ID3D10EffectVariable* This) {
+    return This->lpVtbl->AsVector(This);
+}
+static __WIDL_INLINE ID3D10EffectMatrixVariable * ID3D10EffectVariable_AsMatrix(ID3D10EffectVariable* This) {
+    return This->lpVtbl->AsMatrix(This);
+}
+static __WIDL_INLINE ID3D10EffectStringVariable * ID3D10EffectVariable_AsString(ID3D10EffectVariable* This) {
+    return This->lpVtbl->AsString(This);
+}
+static __WIDL_INLINE ID3D10EffectShaderResourceVariable * ID3D10EffectVariable_AsShaderResource(ID3D10EffectVariable* This) {
+    return This->lpVtbl->AsShaderResource(This);
+}
+static __WIDL_INLINE ID3D10EffectRenderTargetViewVariable * ID3D10EffectVariable_AsRenderTargetView(ID3D10EffectVariable* This) {
+    return This->lpVtbl->AsRenderTargetView(This);
+}
+static __WIDL_INLINE ID3D10EffectDepthStencilViewVariable * ID3D10EffectVariable_AsDepthStencilView(ID3D10EffectVariable* This) {
+    return This->lpVtbl->AsDepthStencilView(This);
+}
+static __WIDL_INLINE ID3D10EffectConstantBuffer * ID3D10EffectVariable_AsConstantBuffer(ID3D10EffectVariable* This) {
+    return This->lpVtbl->AsConstantBuffer(This);
+}
+static __WIDL_INLINE ID3D10EffectShaderVariable * ID3D10EffectVariable_AsShader(ID3D10EffectVariable* This) {
+    return This->lpVtbl->AsShader(This);
+}
+static __WIDL_INLINE ID3D10EffectBlendVariable * ID3D10EffectVariable_AsBlend(ID3D10EffectVariable* This) {
+    return This->lpVtbl->AsBlend(This);
+}
+static __WIDL_INLINE ID3D10EffectDepthStencilVariable * ID3D10EffectVariable_AsDepthStencil(ID3D10EffectVariable* This) {
+    return This->lpVtbl->AsDepthStencil(This);
+}
+static __WIDL_INLINE ID3D10EffectRasterizerVariable * ID3D10EffectVariable_AsRasterizer(ID3D10EffectVariable* This) {
+    return This->lpVtbl->AsRasterizer(This);
+}
+static __WIDL_INLINE ID3D10EffectSamplerVariable * ID3D10EffectVariable_AsSampler(ID3D10EffectVariable* This) {
+    return This->lpVtbl->AsSampler(This);
+}
+static __WIDL_INLINE HRESULT ID3D10EffectVariable_SetRawValue(ID3D10EffectVariable* This,void *data,UINT offset,UINT count) {
+    return This->lpVtbl->SetRawValue(This,data,offset,count);
+}
+static __WIDL_INLINE HRESULT ID3D10EffectVariable_GetRawValue(ID3D10EffectVariable* This,void *data,UINT offset,UINT count) {
+    return This->lpVtbl->GetRawValue(This,data,offset,count);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __ID3D10EffectVariable_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * ID3D10EffectConstantBuffer interface
+ */
+#ifndef __ID3D10EffectConstantBuffer_INTERFACE_DEFINED__
+#define __ID3D10EffectConstantBuffer_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_ID3D10EffectConstantBuffer, 0x56648f4d, 0xcc8b, 0x4444, 0xa5,0xad, 0xb5,0xa3,0xd7,0x6e,0x91,0xb3);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("56648f4d-cc8b-4444-a5ad-b5a3d76e91b3")
+ID3D10EffectConstantBuffer : public ID3D10EffectVariable
+{
+    virtual HRESULT STDMETHODCALLTYPE SetConstantBuffer(
+        ID3D10Buffer *buffer) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetConstantBuffer(
+        ID3D10Buffer **buffer) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetTextureBuffer(
+        ID3D10ShaderResourceView *view) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetTextureBuffer(
+        ID3D10ShaderResourceView **view) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(ID3D10EffectConstantBuffer, 0x56648f4d, 0xcc8b, 0x4444, 0xa5,0xad, 0xb5,0xa3,0xd7,0x6e,0x91,0xb3)
+#endif
+#else
+typedef struct ID3D10EffectConstantBufferVtbl {
+    BEGIN_INTERFACE
+
+    /*** ID3D10EffectVariable methods ***/
+    WINBOOL (STDMETHODCALLTYPE *IsValid)(
+        ID3D10EffectConstantBuffer *This);
+
+    ID3D10EffectType * (STDMETHODCALLTYPE *GetType)(
+        ID3D10EffectConstantBuffer *This);
+
+    HRESULT (STDMETHODCALLTYPE *GetDesc)(
+        ID3D10EffectConstantBuffer *This,
+        D3D10_EFFECT_VARIABLE_DESC *desc);
+
+    ID3D10EffectVariable * (STDMETHODCALLTYPE *GetAnnotationByIndex)(
+        ID3D10EffectConstantBuffer *This,
+        UINT index);
+
+    ID3D10EffectVariable * (STDMETHODCALLTYPE *GetAnnotationByName)(
+        ID3D10EffectConstantBuffer *This,
+        const char *name);
+
+    ID3D10EffectVariable * (STDMETHODCALLTYPE *GetMemberByIndex)(
+        ID3D10EffectConstantBuffer *This,
+        UINT index);
+
+    ID3D10EffectVariable * (STDMETHODCALLTYPE *GetMemberByName)(
+        ID3D10EffectConstantBuffer *This,
+        const char *name);
+
+    ID3D10EffectVariable * (STDMETHODCALLTYPE *GetMemberBySemantic)(
+        ID3D10EffectConstantBuffer *This,
+        const char *semantic);
+
+    ID3D10EffectVariable * (STDMETHODCALLTYPE *GetElement)(
+        ID3D10EffectConstantBuffer *This,
+        UINT index);
+
+    ID3D10EffectConstantBuffer * (STDMETHODCALLTYPE *GetParentConstantBuffer)(
+        ID3D10EffectConstantBuffer *This);
+
+    ID3D10EffectScalarVariable * (STDMETHODCALLTYPE *AsScalar)(
+        ID3D10EffectConstantBuffer *This);
+
+    ID3D10EffectVectorVariable * (STDMETHODCALLTYPE *AsVector)(
+        ID3D10EffectConstantBuffer *This);
+
+    ID3D10EffectMatrixVariable * (STDMETHODCALLTYPE *AsMatrix)(
+        ID3D10EffectConstantBuffer *This);
+
+    ID3D10EffectStringVariable * (STDMETHODCALLTYPE *AsString)(
+        ID3D10EffectConstantBuffer *This);
+
+    ID3D10EffectShaderResourceVariable * (STDMETHODCALLTYPE *AsShaderResource)(
+        ID3D10EffectConstantBuffer *This);
+
+    ID3D10EffectRenderTargetViewVariable * (STDMETHODCALLTYPE *AsRenderTargetView)(
+        ID3D10EffectConstantBuffer *This);
+
+    ID3D10EffectDepthStencilViewVariable * (STDMETHODCALLTYPE *AsDepthStencilView)(
+        ID3D10EffectConstantBuffer *This);
+
+    ID3D10EffectConstantBuffer * (STDMETHODCALLTYPE *AsConstantBuffer)(
+        ID3D10EffectConstantBuffer *This);
+
+    ID3D10EffectShaderVariable * (STDMETHODCALLTYPE *AsShader)(
+        ID3D10EffectConstantBuffer *This);
+
+    ID3D10EffectBlendVariable * (STDMETHODCALLTYPE *AsBlend)(
+        ID3D10EffectConstantBuffer *This);
+
+    ID3D10EffectDepthStencilVariable * (STDMETHODCALLTYPE *AsDepthStencil)(
+        ID3D10EffectConstantBuffer *This);
+
+    ID3D10EffectRasterizerVariable * (STDMETHODCALLTYPE *AsRasterizer)(
+        ID3D10EffectConstantBuffer *This);
+
+    ID3D10EffectSamplerVariable * (STDMETHODCALLTYPE *AsSampler)(
+        ID3D10EffectConstantBuffer *This);
+
+    HRESULT (STDMETHODCALLTYPE *SetRawValue)(
+        ID3D10EffectConstantBuffer *This,
+        void *data,
+        UINT offset,
+        UINT count);
+
+    HRESULT (STDMETHODCALLTYPE *GetRawValue)(
+        ID3D10EffectConstantBuffer *This,
+        void *data,
+        UINT offset,
+        UINT count);
+
+    /*** ID3D10EffectConstantBuffer methods ***/
+    HRESULT (STDMETHODCALLTYPE *SetConstantBuffer)(
+        ID3D10EffectConstantBuffer *This,
+        ID3D10Buffer *buffer);
+
+    HRESULT (STDMETHODCALLTYPE *GetConstantBuffer)(
+        ID3D10EffectConstantBuffer *This,
+        ID3D10Buffer **buffer);
+
+    HRESULT (STDMETHODCALLTYPE *SetTextureBuffer)(
+        ID3D10EffectConstantBuffer *This,
+        ID3D10ShaderResourceView *view);
+
+    HRESULT (STDMETHODCALLTYPE *GetTextureBuffer)(
+        ID3D10EffectConstantBuffer *This,
+        ID3D10ShaderResourceView **view);
+
+    END_INTERFACE
+} ID3D10EffectConstantBufferVtbl;
+
+interface ID3D10EffectConstantBuffer {
+    CONST_VTBL ID3D10EffectConstantBufferVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** ID3D10EffectVariable methods ***/
+#define ID3D10EffectConstantBuffer_IsValid(This) (This)->lpVtbl->IsValid(This)
+#define ID3D10EffectConstantBuffer_GetType(This) (This)->lpVtbl->GetType(This)
+#define ID3D10EffectConstantBuffer_GetDesc(This,desc) (This)->lpVtbl->GetDesc(This,desc)
+#define ID3D10EffectConstantBuffer_GetAnnotationByIndex(This,index) (This)->lpVtbl->GetAnnotationByIndex(This,index)
+#define ID3D10EffectConstantBuffer_GetAnnotationByName(This,name) (This)->lpVtbl->GetAnnotationByName(This,name)
+#define ID3D10EffectConstantBuffer_GetMemberByIndex(This,index) (This)->lpVtbl->GetMemberByIndex(This,index)
+#define ID3D10EffectConstantBuffer_GetMemberByName(This,name) (This)->lpVtbl->GetMemberByName(This,name)
+#define ID3D10EffectConstantBuffer_GetMemberBySemantic(This,semantic) (This)->lpVtbl->GetMemberBySemantic(This,semantic)
+#define ID3D10EffectConstantBuffer_GetElement(This,index) (This)->lpVtbl->GetElement(This,index)
+#define ID3D10EffectConstantBuffer_GetParentConstantBuffer(This) (This)->lpVtbl->GetParentConstantBuffer(This)
+#define ID3D10EffectConstantBuffer_AsScalar(This) (This)->lpVtbl->AsScalar(This)
+#define ID3D10EffectConstantBuffer_AsVector(This) (This)->lpVtbl->AsVector(This)
+#define ID3D10EffectConstantBuffer_AsMatrix(This) (This)->lpVtbl->AsMatrix(This)
+#define ID3D10EffectConstantBuffer_AsString(This) (This)->lpVtbl->AsString(This)
+#define ID3D10EffectConstantBuffer_AsShaderResource(This) (This)->lpVtbl->AsShaderResource(This)
+#define ID3D10EffectConstantBuffer_AsRenderTargetView(This) (This)->lpVtbl->AsRenderTargetView(This)
+#define ID3D10EffectConstantBuffer_AsDepthStencilView(This) (This)->lpVtbl->AsDepthStencilView(This)
+#define ID3D10EffectConstantBuffer_AsConstantBuffer(This) (This)->lpVtbl->AsConstantBuffer(This)
+#define ID3D10EffectConstantBuffer_AsShader(This) (This)->lpVtbl->AsShader(This)
+#define ID3D10EffectConstantBuffer_AsBlend(This) (This)->lpVtbl->AsBlend(This)
+#define ID3D10EffectConstantBuffer_AsDepthStencil(This) (This)->lpVtbl->AsDepthStencil(This)
+#define ID3D10EffectConstantBuffer_AsRasterizer(This) (This)->lpVtbl->AsRasterizer(This)
+#define ID3D10EffectConstantBuffer_AsSampler(This) (This)->lpVtbl->AsSampler(This)
+#define ID3D10EffectConstantBuffer_SetRawValue(This,data,offset,count) (This)->lpVtbl->SetRawValue(This,data,offset,count)
+#define ID3D10EffectConstantBuffer_GetRawValue(This,data,offset,count) (This)->lpVtbl->GetRawValue(This,data,offset,count)
+/*** ID3D10EffectConstantBuffer methods ***/
+#define ID3D10EffectConstantBuffer_SetConstantBuffer(This,buffer) (This)->lpVtbl->SetConstantBuffer(This,buffer)
+#define ID3D10EffectConstantBuffer_GetConstantBuffer(This,buffer) (This)->lpVtbl->GetConstantBuffer(This,buffer)
+#define ID3D10EffectConstantBuffer_SetTextureBuffer(This,view) (This)->lpVtbl->SetTextureBuffer(This,view)
+#define ID3D10EffectConstantBuffer_GetTextureBuffer(This,view) (This)->lpVtbl->GetTextureBuffer(This,view)
+#else
+/*** ID3D10EffectVariable methods ***/
+static __WIDL_INLINE WINBOOL ID3D10EffectConstantBuffer_IsValid(ID3D10EffectConstantBuffer* This) {
+    return This->lpVtbl->IsValid(This);
+}
+static __WIDL_INLINE ID3D10EffectType * ID3D10EffectConstantBuffer_GetType(ID3D10EffectConstantBuffer* This) {
+    return This->lpVtbl->GetType(This);
+}
+static __WIDL_INLINE HRESULT ID3D10EffectConstantBuffer_GetDesc(ID3D10EffectConstantBuffer* This,D3D10_EFFECT_VARIABLE_DESC *desc) {
+    return This->lpVtbl->GetDesc(This,desc);
+}
+static __WIDL_INLINE ID3D10EffectVariable * ID3D10EffectConstantBuffer_GetAnnotationByIndex(ID3D10EffectConstantBuffer* This,UINT index) {
+    return This->lpVtbl->GetAnnotationByIndex(This,index);
+}
+static __WIDL_INLINE ID3D10EffectVariable * ID3D10EffectConstantBuffer_GetAnnotationByName(ID3D10EffectConstantBuffer* This,const char *name) {
+    return This->lpVtbl->GetAnnotationByName(This,name);
+}
+static __WIDL_INLINE ID3D10EffectVariable * ID3D10EffectConstantBuffer_GetMemberByIndex(ID3D10EffectConstantBuffer* This,UINT index) {
+    return This->lpVtbl->GetMemberByIndex(This,index);
+}
+static __WIDL_INLINE ID3D10EffectVariable * ID3D10EffectConstantBuffer_GetMemberByName(ID3D10EffectConstantBuffer* This,const char *name) {
+    return This->lpVtbl->GetMemberByName(This,name);
+}
+static __WIDL_INLINE ID3D10EffectVariable * ID3D10EffectConstantBuffer_GetMemberBySemantic(ID3D10EffectConstantBuffer* This,const char *semantic) {
+    return This->lpVtbl->GetMemberBySemantic(This,semantic);
+}
+static __WIDL_INLINE ID3D10EffectVariable * ID3D10EffectConstantBuffer_GetElement(ID3D10EffectConstantBuffer* This,UINT index) {
+    return This->lpVtbl->GetElement(This,index);
+}
+static __WIDL_INLINE ID3D10EffectConstantBuffer * ID3D10EffectConstantBuffer_GetParentConstantBuffer(ID3D10EffectConstantBuffer* This) {
+    return This->lpVtbl->GetParentConstantBuffer(This);
+}
+static __WIDL_INLINE ID3D10EffectScalarVariable * ID3D10EffectConstantBuffer_AsScalar(ID3D10EffectConstantBuffer* This) {
+    return This->lpVtbl->AsScalar(This);
+}
+static __WIDL_INLINE ID3D10EffectVectorVariable * ID3D10EffectConstantBuffer_AsVector(ID3D10EffectConstantBuffer* This) {
+    return This->lpVtbl->AsVector(This);
+}
+static __WIDL_INLINE ID3D10EffectMatrixVariable * ID3D10EffectConstantBuffer_AsMatrix(ID3D10EffectConstantBuffer* This) {
+    return This->lpVtbl->AsMatrix(This);
+}
+static __WIDL_INLINE ID3D10EffectStringVariable * ID3D10EffectConstantBuffer_AsString(ID3D10EffectConstantBuffer* This) {
+    return This->lpVtbl->AsString(This);
+}
+static __WIDL_INLINE ID3D10EffectShaderResourceVariable * ID3D10EffectConstantBuffer_AsShaderResource(ID3D10EffectConstantBuffer* This) {
+    return This->lpVtbl->AsShaderResource(This);
+}
+static __WIDL_INLINE ID3D10EffectRenderTargetViewVariable * ID3D10EffectConstantBuffer_AsRenderTargetView(ID3D10EffectConstantBuffer* This) {
+    return This->lpVtbl->AsRenderTargetView(This);
+}
+static __WIDL_INLINE ID3D10EffectDepthStencilViewVariable * ID3D10EffectConstantBuffer_AsDepthStencilView(ID3D10EffectConstantBuffer* This) {
+    return This->lpVtbl->AsDepthStencilView(This);
+}
+static __WIDL_INLINE ID3D10EffectConstantBuffer * ID3D10EffectConstantBuffer_AsConstantBuffer(ID3D10EffectConstantBuffer* This) {
+    return This->lpVtbl->AsConstantBuffer(This);
+}
+static __WIDL_INLINE ID3D10EffectShaderVariable * ID3D10EffectConstantBuffer_AsShader(ID3D10EffectConstantBuffer* This) {
+    return This->lpVtbl->AsShader(This);
+}
+static __WIDL_INLINE ID3D10EffectBlendVariable * ID3D10EffectConstantBuffer_AsBlend(ID3D10EffectConstantBuffer* This) {
+    return This->lpVtbl->AsBlend(This);
+}
+static __WIDL_INLINE ID3D10EffectDepthStencilVariable * ID3D10EffectConstantBuffer_AsDepthStencil(ID3D10EffectConstantBuffer* This) {
+    return This->lpVtbl->AsDepthStencil(This);
+}
+static __WIDL_INLINE ID3D10EffectRasterizerVariable * ID3D10EffectConstantBuffer_AsRasterizer(ID3D10EffectConstantBuffer* This) {
+    return This->lpVtbl->AsRasterizer(This);
+}
+static __WIDL_INLINE ID3D10EffectSamplerVariable * ID3D10EffectConstantBuffer_AsSampler(ID3D10EffectConstantBuffer* This) {
+    return This->lpVtbl->AsSampler(This);
+}
+static __WIDL_INLINE HRESULT ID3D10EffectConstantBuffer_SetRawValue(ID3D10EffectConstantBuffer* This,void *data,UINT offset,UINT count) {
+    return This->lpVtbl->SetRawValue(This,data,offset,count);
+}
+static __WIDL_INLINE HRESULT ID3D10EffectConstantBuffer_GetRawValue(ID3D10EffectConstantBuffer* This,void *data,UINT offset,UINT count) {
+    return This->lpVtbl->GetRawValue(This,data,offset,count);
+}
+/*** ID3D10EffectConstantBuffer methods ***/
+static __WIDL_INLINE HRESULT ID3D10EffectConstantBuffer_SetConstantBuffer(ID3D10EffectConstantBuffer* This,ID3D10Buffer *buffer) {
+    return This->lpVtbl->SetConstantBuffer(This,buffer);
+}
+static __WIDL_INLINE HRESULT ID3D10EffectConstantBuffer_GetConstantBuffer(ID3D10EffectConstantBuffer* This,ID3D10Buffer **buffer) {
+    return This->lpVtbl->GetConstantBuffer(This,buffer);
+}
+static __WIDL_INLINE HRESULT ID3D10EffectConstantBuffer_SetTextureBuffer(ID3D10EffectConstantBuffer* This,ID3D10ShaderResourceView *view) {
+    return This->lpVtbl->SetTextureBuffer(This,view);
+}
+static __WIDL_INLINE HRESULT ID3D10EffectConstantBuffer_GetTextureBuffer(ID3D10EffectConstantBuffer* This,ID3D10ShaderResourceView **view) {
+    return This->lpVtbl->GetTextureBuffer(This,view);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __ID3D10EffectConstantBuffer_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * ID3D10EffectScalarVariable interface
+ */
+#ifndef __ID3D10EffectScalarVariable_INTERFACE_DEFINED__
+#define __ID3D10EffectScalarVariable_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_ID3D10EffectScalarVariable, 0x00e48f7b, 0xd2c8, 0x49e8, 0xa8,0x6c, 0x02,0x2d,0xee,0x53,0x43,0x1f);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("00e48f7b-d2c8-49e8-a86c-022dee53431f")
+ID3D10EffectScalarVariable : public ID3D10EffectVariable
+{
+    virtual HRESULT STDMETHODCALLTYPE SetFloat(
+        float value) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetFloat(
+        float *value) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetFloatArray(
+        float *values,
+        UINT offset,
+        UINT count) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetFloatArray(
+        float *values,
+        UINT offset,
+        UINT count) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetInt(
+        int value) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetInt(
+        int *value) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetIntArray(
+        int *values,
+        UINT offset,
+        UINT count) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetIntArray(
+        int *values,
+        UINT offset,
+        UINT count) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetBool(
+        WINBOOL value) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetBool(
+        WINBOOL *value) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetBoolArray(
+        WINBOOL *values,
+        UINT offset,
+        UINT count) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetBoolArray(
+        WINBOOL *values,
+        UINT offset,
+        UINT count) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(ID3D10EffectScalarVariable, 0x00e48f7b, 0xd2c8, 0x49e8, 0xa8,0x6c, 0x02,0x2d,0xee,0x53,0x43,0x1f)
+#endif
+#else
+typedef struct ID3D10EffectScalarVariableVtbl {
+    BEGIN_INTERFACE
+
+    /*** ID3D10EffectVariable methods ***/
+    WINBOOL (STDMETHODCALLTYPE *IsValid)(
+        ID3D10EffectScalarVariable *This);
+
+    ID3D10EffectType * (STDMETHODCALLTYPE *GetType)(
+        ID3D10EffectScalarVariable *This);
+
+    HRESULT (STDMETHODCALLTYPE *GetDesc)(
+        ID3D10EffectScalarVariable *This,
+        D3D10_EFFECT_VARIABLE_DESC *desc);
+
+    ID3D10EffectVariable * (STDMETHODCALLTYPE *GetAnnotationByIndex)(
+        ID3D10EffectScalarVariable *This,
+        UINT index);
+
+    ID3D10EffectVariable * (STDMETHODCALLTYPE *GetAnnotationByName)(
+        ID3D10EffectScalarVariable *This,
+        const char *name);
+
+    ID3D10EffectVariable * (STDMETHODCALLTYPE *GetMemberByIndex)(
+        ID3D10EffectScalarVariable *This,
+        UINT index);
+
+    ID3D10EffectVariable * (STDMETHODCALLTYPE *GetMemberByName)(
+        ID3D10EffectScalarVariable *This,
+        const char *name);
+
+    ID3D10EffectVariable * (STDMETHODCALLTYPE *GetMemberBySemantic)(
+        ID3D10EffectScalarVariable *This,
+        const char *semantic);
+
+    ID3D10EffectVariable * (STDMETHODCALLTYPE *GetElement)(
+        ID3D10EffectScalarVariable *This,
+        UINT index);
+
+    ID3D10EffectConstantBuffer * (STDMETHODCALLTYPE *GetParentConstantBuffer)(
+        ID3D10EffectScalarVariable *This);
+
+    ID3D10EffectScalarVariable * (STDMETHODCALLTYPE *AsScalar)(
+        ID3D10EffectScalarVariable *This);
+
+    ID3D10EffectVectorVariable * (STDMETHODCALLTYPE *AsVector)(
+        ID3D10EffectScalarVariable *This);
+
+    ID3D10EffectMatrixVariable * (STDMETHODCALLTYPE *AsMatrix)(
+        ID3D10EffectScalarVariable *This);
+
+    ID3D10EffectStringVariable * (STDMETHODCALLTYPE *AsString)(
+        ID3D10EffectScalarVariable *This);
+
+    ID3D10EffectShaderResourceVariable * (STDMETHODCALLTYPE *AsShaderResource)(
+        ID3D10EffectScalarVariable *This);
+
+    ID3D10EffectRenderTargetViewVariable * (STDMETHODCALLTYPE *AsRenderTargetView)(
+        ID3D10EffectScalarVariable *This);
+
+    ID3D10EffectDepthStencilViewVariable * (STDMETHODCALLTYPE *AsDepthStencilView)(
+        ID3D10EffectScalarVariable *This);
+
+    ID3D10EffectConstantBuffer * (STDMETHODCALLTYPE *AsConstantBuffer)(
+        ID3D10EffectScalarVariable *This);
+
+    ID3D10EffectShaderVariable * (STDMETHODCALLTYPE *AsShader)(
+        ID3D10EffectScalarVariable *This);
+
+    ID3D10EffectBlendVariable * (STDMETHODCALLTYPE *AsBlend)(
+        ID3D10EffectScalarVariable *This);
+
+    ID3D10EffectDepthStencilVariable * (STDMETHODCALLTYPE *AsDepthStencil)(
+        ID3D10EffectScalarVariable *This);
+
+    ID3D10EffectRasterizerVariable * (STDMETHODCALLTYPE *AsRasterizer)(
+        ID3D10EffectScalarVariable *This);
+
+    ID3D10EffectSamplerVariable * (STDMETHODCALLTYPE *AsSampler)(
+        ID3D10EffectScalarVariable *This);
+
+    HRESULT (STDMETHODCALLTYPE *SetRawValue)(
+        ID3D10EffectScalarVariable *This,
+        void *data,
+        UINT offset,
+        UINT count);
+
+    HRESULT (STDMETHODCALLTYPE *GetRawValue)(
+        ID3D10EffectScalarVariable *This,
+        void *data,
+        UINT offset,
+        UINT count);
+
+    /*** ID3D10EffectScalarVariable methods ***/
+    HRESULT (STDMETHODCALLTYPE *SetFloat)(
+        ID3D10EffectScalarVariable *This,
+        float value);
+
+    HRESULT (STDMETHODCALLTYPE *GetFloat)(
+        ID3D10EffectScalarVariable *This,
+        float *value);
+
+    HRESULT (STDMETHODCALLTYPE *SetFloatArray)(
+        ID3D10EffectScalarVariable *This,
+        float *values,
+        UINT offset,
+        UINT count);
+
+    HRESULT (STDMETHODCALLTYPE *GetFloatArray)(
+        ID3D10EffectScalarVariable *This,
+        float *values,
+        UINT offset,
+        UINT count);
+
+    HRESULT (STDMETHODCALLTYPE *SetInt)(
+        ID3D10EffectScalarVariable *This,
+        int value);
+
+    HRESULT (STDMETHODCALLTYPE *GetInt)(
+        ID3D10EffectScalarVariable *This,
+        int *value);
+
+    HRESULT (STDMETHODCALLTYPE *SetIntArray)(
+        ID3D10EffectScalarVariable *This,
+        int *values,
+        UINT offset,
+        UINT count);
+
+    HRESULT (STDMETHODCALLTYPE *GetIntArray)(
+        ID3D10EffectScalarVariable *This,
+        int *values,
+        UINT offset,
+        UINT count);
+
+    HRESULT (STDMETHODCALLTYPE *SetBool)(
+        ID3D10EffectScalarVariable *This,
+        WINBOOL value);
+
+    HRESULT (STDMETHODCALLTYPE *GetBool)(
+        ID3D10EffectScalarVariable *This,
+        WINBOOL *value);
+
+    HRESULT (STDMETHODCALLTYPE *SetBoolArray)(
+        ID3D10EffectScalarVariable *This,
+        WINBOOL *values,
+        UINT offset,
+        UINT count);
+
+    HRESULT (STDMETHODCALLTYPE *GetBoolArray)(
+        ID3D10EffectScalarVariable *This,
+        WINBOOL *values,
+        UINT offset,
+        UINT count);
+
+    END_INTERFACE
+} ID3D10EffectScalarVariableVtbl;
+
+interface ID3D10EffectScalarVariable {
+    CONST_VTBL ID3D10EffectScalarVariableVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** ID3D10EffectVariable methods ***/
+#define ID3D10EffectScalarVariable_IsValid(This) (This)->lpVtbl->IsValid(This)
+#define ID3D10EffectScalarVariable_GetType(This) (This)->lpVtbl->GetType(This)
+#define ID3D10EffectScalarVariable_GetDesc(This,desc) (This)->lpVtbl->GetDesc(This,desc)
+#define ID3D10EffectScalarVariable_GetAnnotationByIndex(This,index) (This)->lpVtbl->GetAnnotationByIndex(This,index)
+#define ID3D10EffectScalarVariable_GetAnnotationByName(This,name) (This)->lpVtbl->GetAnnotationByName(This,name)
+#define ID3D10EffectScalarVariable_GetMemberByIndex(This,index) (This)->lpVtbl->GetMemberByIndex(This,index)
+#define ID3D10EffectScalarVariable_GetMemberByName(This,name) (This)->lpVtbl->GetMemberByName(This,name)
+#define ID3D10EffectScalarVariable_GetMemberBySemantic(This,semantic) (This)->lpVtbl->GetMemberBySemantic(This,semantic)
+#define ID3D10EffectScalarVariable_GetElement(This,index) (This)->lpVtbl->GetElement(This,index)
+#define ID3D10EffectScalarVariable_GetParentConstantBuffer(This) (This)->lpVtbl->GetParentConstantBuffer(This)
+#define ID3D10EffectScalarVariable_AsScalar(This) (This)->lpVtbl->AsScalar(This)
+#define ID3D10EffectScalarVariable_AsVector(This) (This)->lpVtbl->AsVector(This)
+#define ID3D10EffectScalarVariable_AsMatrix(This) (This)->lpVtbl->AsMatrix(This)
+#define ID3D10EffectScalarVariable_AsString(This) (This)->lpVtbl->AsString(This)
+#define ID3D10EffectScalarVariable_AsShaderResource(This) (This)->lpVtbl->AsShaderResource(This)
+#define ID3D10EffectScalarVariable_AsRenderTargetView(This) (This)->lpVtbl->AsRenderTargetView(This)
+#define ID3D10EffectScalarVariable_AsDepthStencilView(This) (This)->lpVtbl->AsDepthStencilView(This)
+#define ID3D10EffectScalarVariable_AsConstantBuffer(This) (This)->lpVtbl->AsConstantBuffer(This)
+#define ID3D10EffectScalarVariable_AsShader(This) (This)->lpVtbl->AsShader(This)
+#define ID3D10EffectScalarVariable_AsBlend(This) (This)->lpVtbl->AsBlend(This)
+#define ID3D10EffectScalarVariable_AsDepthStencil(This) (This)->lpVtbl->AsDepthStencil(This)
+#define ID3D10EffectScalarVariable_AsRasterizer(This) (This)->lpVtbl->AsRasterizer(This)
+#define ID3D10EffectScalarVariable_AsSampler(This) (This)->lpVtbl->AsSampler(This)
+#define ID3D10EffectScalarVariable_SetRawValue(This,data,offset,count) (This)->lpVtbl->SetRawValue(This,data,offset,count)
+#define ID3D10EffectScalarVariable_GetRawValue(This,data,offset,count) (This)->lpVtbl->GetRawValue(This,data,offset,count)
+/*** ID3D10EffectScalarVariable methods ***/
+#define ID3D10EffectScalarVariable_SetFloat(This,value) (This)->lpVtbl->SetFloat(This,value)
+#define ID3D10EffectScalarVariable_GetFloat(This,value) (This)->lpVtbl->GetFloat(This,value)
+#define ID3D10EffectScalarVariable_SetFloatArray(This,values,offset,count) (This)->lpVtbl->SetFloatArray(This,values,offset,count)
+#define ID3D10EffectScalarVariable_GetFloatArray(This,values,offset,count) (This)->lpVtbl->GetFloatArray(This,values,offset,count)
+#define ID3D10EffectScalarVariable_SetInt(This,value) (This)->lpVtbl->SetInt(This,value)
+#define ID3D10EffectScalarVariable_GetInt(This,value) (This)->lpVtbl->GetInt(This,value)
+#define ID3D10EffectScalarVariable_SetIntArray(This,values,offset,count) (This)->lpVtbl->SetIntArray(This,values,offset,count)
+#define ID3D10EffectScalarVariable_GetIntArray(This,values,offset,count) (This)->lpVtbl->GetIntArray(This,values,offset,count)
+#define ID3D10EffectScalarVariable_SetBool(This,value) (This)->lpVtbl->SetBool(This,value)
+#define ID3D10EffectScalarVariable_GetBool(This,value) (This)->lpVtbl->GetBool(This,value)
+#define ID3D10EffectScalarVariable_SetBoolArray(This,values,offset,count) (This)->lpVtbl->SetBoolArray(This,values,offset,count)
+#define ID3D10EffectScalarVariable_GetBoolArray(This,values,offset,count) (This)->lpVtbl->GetBoolArray(This,values,offset,count)
+#else
+/*** ID3D10EffectVariable methods ***/
+static __WIDL_INLINE WINBOOL ID3D10EffectScalarVariable_IsValid(ID3D10EffectScalarVariable* This) {
+    return This->lpVtbl->IsValid(This);
+}
+static __WIDL_INLINE ID3D10EffectType * ID3D10EffectScalarVariable_GetType(ID3D10EffectScalarVariable* This) {
+    return This->lpVtbl->GetType(This);
+}
+static __WIDL_INLINE HRESULT ID3D10EffectScalarVariable_GetDesc(ID3D10EffectScalarVariable* This,D3D10_EFFECT_VARIABLE_DESC *desc) {
+    return This->lpVtbl->GetDesc(This,desc);
+}
+static __WIDL_INLINE ID3D10EffectVariable * ID3D10EffectScalarVariable_GetAnnotationByIndex(ID3D10EffectScalarVariable* This,UINT index) {
+    return This->lpVtbl->GetAnnotationByIndex(This,index);
+}
+static __WIDL_INLINE ID3D10EffectVariable * ID3D10EffectScalarVariable_GetAnnotationByName(ID3D10EffectScalarVariable* This,const char *name) {
+    return This->lpVtbl->GetAnnotationByName(This,name);
+}
+static __WIDL_INLINE ID3D10EffectVariable * ID3D10EffectScalarVariable_GetMemberByIndex(ID3D10EffectScalarVariable* This,UINT index) {
+    return This->lpVtbl->GetMemberByIndex(This,index);
+}
+static __WIDL_INLINE ID3D10EffectVariable * ID3D10EffectScalarVariable_GetMemberByName(ID3D10EffectScalarVariable* This,const char *name) {
+    return This->lpVtbl->GetMemberByName(This,name);
+}
+static __WIDL_INLINE ID3D10EffectVariable * ID3D10EffectScalarVariable_GetMemberBySemantic(ID3D10EffectScalarVariable* This,const char *semantic) {
+    return This->lpVtbl->GetMemberBySemantic(This,semantic);
+}
+static __WIDL_INLINE ID3D10EffectVariable * ID3D10EffectScalarVariable_GetElement(ID3D10EffectScalarVariable* This,UINT index) {
+    return This->lpVtbl->GetElement(This,index);
+}
+static __WIDL_INLINE ID3D10EffectConstantBuffer * ID3D10EffectScalarVariable_GetParentConstantBuffer(ID3D10EffectScalarVariable* This) {
+    return This->lpVtbl->GetParentConstantBuffer(This);
+}
+static __WIDL_INLINE ID3D10EffectScalarVariable * ID3D10EffectScalarVariable_AsScalar(ID3D10EffectScalarVariable* This) {
+    return This->lpVtbl->AsScalar(This);
+}
+static __WIDL_INLINE ID3D10EffectVectorVariable * ID3D10EffectScalarVariable_AsVector(ID3D10EffectScalarVariable* This) {
+    return This->lpVtbl->AsVector(This);
+}
+static __WIDL_INLINE ID3D10EffectMatrixVariable * ID3D10EffectScalarVariable_AsMatrix(ID3D10EffectScalarVariable* This) {
+    return This->lpVtbl->AsMatrix(This);
+}
+static __WIDL_INLINE ID3D10EffectStringVariable * ID3D10EffectScalarVariable_AsString(ID3D10EffectScalarVariable* This) {
+    return This->lpVtbl->AsString(This);
+}
+static __WIDL_INLINE ID3D10EffectShaderResourceVariable * ID3D10EffectScalarVariable_AsShaderResource(ID3D10EffectScalarVariable* This) {
+    return This->lpVtbl->AsShaderResource(This);
+}
+static __WIDL_INLINE ID3D10EffectRenderTargetViewVariable * ID3D10EffectScalarVariable_AsRenderTargetView(ID3D10EffectScalarVariable* This) {
+    return This->lpVtbl->AsRenderTargetView(This);
+}
+static __WIDL_INLINE ID3D10EffectDepthStencilViewVariable * ID3D10EffectScalarVariable_AsDepthStencilView(ID3D10EffectScalarVariable* This) {
+    return This->lpVtbl->AsDepthStencilView(This);
+}
+static __WIDL_INLINE ID3D10EffectConstantBuffer * ID3D10EffectScalarVariable_AsConstantBuffer(ID3D10EffectScalarVariable* This) {
+    return This->lpVtbl->AsConstantBuffer(This);
+}
+static __WIDL_INLINE ID3D10EffectShaderVariable * ID3D10EffectScalarVariable_AsShader(ID3D10EffectScalarVariable* This) {
+    return This->lpVtbl->AsShader(This);
+}
+static __WIDL_INLINE ID3D10EffectBlendVariable * ID3D10EffectScalarVariable_AsBlend(ID3D10EffectScalarVariable* This) {
+    return This->lpVtbl->AsBlend(This);
+}
+static __WIDL_INLINE ID3D10EffectDepthStencilVariable * ID3D10EffectScalarVariable_AsDepthStencil(ID3D10EffectScalarVariable* This) {
+    return This->lpVtbl->AsDepthStencil(This);
+}
+static __WIDL_INLINE ID3D10EffectRasterizerVariable * ID3D10EffectScalarVariable_AsRasterizer(ID3D10EffectScalarVariable* This) {
+    return This->lpVtbl->AsRasterizer(This);
+}
+static __WIDL_INLINE ID3D10EffectSamplerVariable * ID3D10EffectScalarVariable_AsSampler(ID3D10EffectScalarVariable* This) {
+    return This->lpVtbl->AsSampler(This);
+}
+static __WIDL_INLINE HRESULT ID3D10EffectScalarVariable_SetRawValue(ID3D10EffectScalarVariable* This,void *data,UINT offset,UINT count) {
+    return This->lpVtbl->SetRawValue(This,data,offset,count);
+}
+static __WIDL_INLINE HRESULT ID3D10EffectScalarVariable_GetRawValue(ID3D10EffectScalarVariable* This,void *data,UINT offset,UINT count) {
+    return This->lpVtbl->GetRawValue(This,data,offset,count);
+}
+/*** ID3D10EffectScalarVariable methods ***/
+static __WIDL_INLINE HRESULT ID3D10EffectScalarVariable_SetFloat(ID3D10EffectScalarVariable* This,float value) {
+    return This->lpVtbl->SetFloat(This,value);
+}
+static __WIDL_INLINE HRESULT ID3D10EffectScalarVariable_GetFloat(ID3D10EffectScalarVariable* This,float *value) {
+    return This->lpVtbl->GetFloat(This,value);
+}
+static __WIDL_INLINE HRESULT ID3D10EffectScalarVariable_SetFloatArray(ID3D10EffectScalarVariable* This,float *values,UINT offset,UINT count) {
+    return This->lpVtbl->SetFloatArray(This,values,offset,count);
+}
+static __WIDL_INLINE HRESULT ID3D10EffectScalarVariable_GetFloatArray(ID3D10EffectScalarVariable* This,float *values,UINT offset,UINT count) {
+    return This->lpVtbl->GetFloatArray(This,values,offset,count);
+}
+static __WIDL_INLINE HRESULT ID3D10EffectScalarVariable_SetInt(ID3D10EffectScalarVariable* This,int value) {
+    return This->lpVtbl->SetInt(This,value);
+}
+static __WIDL_INLINE HRESULT ID3D10EffectScalarVariable_GetInt(ID3D10EffectScalarVariable* This,int *value) {
+    return This->lpVtbl->GetInt(This,value);
+}
+static __WIDL_INLINE HRESULT ID3D10EffectScalarVariable_SetIntArray(ID3D10EffectScalarVariable* This,int *values,UINT offset,UINT count) {
+    return This->lpVtbl->SetIntArray(This,values,offset,count);
+}
+static __WIDL_INLINE HRESULT ID3D10EffectScalarVariable_GetIntArray(ID3D10EffectScalarVariable* This,int *values,UINT offset,UINT count) {
+    return This->lpVtbl->GetIntArray(This,values,offset,count);
+}
+static __WIDL_INLINE HRESULT ID3D10EffectScalarVariable_SetBool(ID3D10EffectScalarVariable* This,WINBOOL value) {
+    return This->lpVtbl->SetBool(This,value);
+}
+static __WIDL_INLINE HRESULT ID3D10EffectScalarVariable_GetBool(ID3D10EffectScalarVariable* This,WINBOOL *value) {
+    return This->lpVtbl->GetBool(This,value);
+}
+static __WIDL_INLINE HRESULT ID3D10EffectScalarVariable_SetBoolArray(ID3D10EffectScalarVariable* This,WINBOOL *values,UINT offset,UINT count) {
+    return This->lpVtbl->SetBoolArray(This,values,offset,count);
+}
+static __WIDL_INLINE HRESULT ID3D10EffectScalarVariable_GetBoolArray(ID3D10EffectScalarVariable* This,WINBOOL *values,UINT offset,UINT count) {
+    return This->lpVtbl->GetBoolArray(This,values,offset,count);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __ID3D10EffectScalarVariable_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * ID3D10EffectVectorVariable interface
+ */
+#ifndef __ID3D10EffectVectorVariable_INTERFACE_DEFINED__
+#define __ID3D10EffectVectorVariable_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_ID3D10EffectVectorVariable, 0x62b98c44, 0x1f82, 0x4c67, 0xbc,0xd0, 0x72,0xcf,0x8f,0x21,0x7e,0x81);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("62b98c44-1f82-4c67-bcd0-72cf8f217e81")
+ID3D10EffectVectorVariable : public ID3D10EffectVariable
+{
+    virtual HRESULT STDMETHODCALLTYPE SetBoolVector(
+        WINBOOL *value) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetIntVector(
+        int *value) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetFloatVector(
+        float *value) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetBoolVector(
+        WINBOOL *value) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetIntVector(
+        int *value) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetFloatVector(
+        float *value) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetBoolVectorArray(
+        WINBOOL *values,
+        UINT offset,
+        UINT count) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetIntVectorArray(
+        int *values,
+        UINT offset,
+        UINT count) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetFloatVectorArray(
+        float *values,
+        UINT offset,
+        UINT count) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetBoolVectorArray(
+        WINBOOL *values,
+        UINT offset,
+        UINT count) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetIntVectorArray(
+        int *values,
+        UINT offset,
+        UINT count) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetFloatVectorArray(
+        float *values,
+        UINT offset,
+        UINT count) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(ID3D10EffectVectorVariable, 0x62b98c44, 0x1f82, 0x4c67, 0xbc,0xd0, 0x72,0xcf,0x8f,0x21,0x7e,0x81)
+#endif
+#else
+typedef struct ID3D10EffectVectorVariableVtbl {
+    BEGIN_INTERFACE
+
+    /*** ID3D10EffectVariable methods ***/
+    WINBOOL (STDMETHODCALLTYPE *IsValid)(
+        ID3D10EffectVectorVariable *This);
+
+    ID3D10EffectType * (STDMETHODCALLTYPE *GetType)(
+        ID3D10EffectVectorVariable *This);
+
+    HRESULT (STDMETHODCALLTYPE *GetDesc)(
+        ID3D10EffectVectorVariable *This,
+        D3D10_EFFECT_VARIABLE_DESC *desc);
+
+    ID3D10EffectVariable * (STDMETHODCALLTYPE *GetAnnotationByIndex)(
+        ID3D10EffectVectorVariable *This,
+        UINT index);
+
+    ID3D10EffectVariable * (STDMETHODCALLTYPE *GetAnnotationByName)(
+        ID3D10EffectVectorVariable *This,
+        const char *name);
+
+    ID3D10EffectVariable * (STDMETHODCALLTYPE *GetMemberByIndex)(
+        ID3D10EffectVectorVariable *This,
+        UINT index);
+
+    ID3D10EffectVariable * (STDMETHODCALLTYPE *GetMemberByName)(
+        ID3D10EffectVectorVariable *This,
+        const char *name);
+
+    ID3D10EffectVariable * (STDMETHODCALLTYPE *GetMemberBySemantic)(
+        ID3D10EffectVectorVariable *This,
+        const char *semantic);
+
+    ID3D10EffectVariable * (STDMETHODCALLTYPE *GetElement)(
+        ID3D10EffectVectorVariable *This,
+        UINT index);
+
+    ID3D10EffectConstantBuffer * (STDMETHODCALLTYPE *GetParentConstantBuffer)(
+        ID3D10EffectVectorVariable *This);
+
+    ID3D10EffectScalarVariable * (STDMETHODCALLTYPE *AsScalar)(
+        ID3D10EffectVectorVariable *This);
+
+    ID3D10EffectVectorVariable * (STDMETHODCALLTYPE *AsVector)(
+        ID3D10EffectVectorVariable *This);
+
+    ID3D10EffectMatrixVariable * (STDMETHODCALLTYPE *AsMatrix)(
+        ID3D10EffectVectorVariable *This);
+
+    ID3D10EffectStringVariable * (STDMETHODCALLTYPE *AsString)(
+        ID3D10EffectVectorVariable *This);
+
+    ID3D10EffectShaderResourceVariable * (STDMETHODCALLTYPE *AsShaderResource)(
+        ID3D10EffectVectorVariable *This);
+
+    ID3D10EffectRenderTargetViewVariable * (STDMETHODCALLTYPE *AsRenderTargetView)(
+        ID3D10EffectVectorVariable *This);
+
+    ID3D10EffectDepthStencilViewVariable * (STDMETHODCALLTYPE *AsDepthStencilView)(
+        ID3D10EffectVectorVariable *This);
+
+    ID3D10EffectConstantBuffer * (STDMETHODCALLTYPE *AsConstantBuffer)(
+        ID3D10EffectVectorVariable *This);
+
+    ID3D10EffectShaderVariable * (STDMETHODCALLTYPE *AsShader)(
+        ID3D10EffectVectorVariable *This);
+
+    ID3D10EffectBlendVariable * (STDMETHODCALLTYPE *AsBlend)(
+        ID3D10EffectVectorVariable *This);
+
+    ID3D10EffectDepthStencilVariable * (STDMETHODCALLTYPE *AsDepthStencil)(
+        ID3D10EffectVectorVariable *This);
+
+    ID3D10EffectRasterizerVariable * (STDMETHODCALLTYPE *AsRasterizer)(
+        ID3D10EffectVectorVariable *This);
+
+    ID3D10EffectSamplerVariable * (STDMETHODCALLTYPE *AsSampler)(
+        ID3D10EffectVectorVariable *This);
+
+    HRESULT (STDMETHODCALLTYPE *SetRawValue)(
+        ID3D10EffectVectorVariable *This,
+        void *data,
+        UINT offset,
+        UINT count);
+
+    HRESULT (STDMETHODCALLTYPE *GetRawValue)(
+        ID3D10EffectVectorVariable *This,
+        void *data,
+        UINT offset,
+        UINT count);
+
+    /*** ID3D10EffectVectorVariable methods ***/
+    HRESULT (STDMETHODCALLTYPE *SetBoolVector)(
+        ID3D10EffectVectorVariable *This,
+        WINBOOL *value);
+
+    HRESULT (STDMETHODCALLTYPE *SetIntVector)(
+        ID3D10EffectVectorVariable *This,
+        int *value);
+
+    HRESULT (STDMETHODCALLTYPE *SetFloatVector)(
+        ID3D10EffectVectorVariable *This,
+        float *value);
+
+    HRESULT (STDMETHODCALLTYPE *GetBoolVector)(
+        ID3D10EffectVectorVariable *This,
+        WINBOOL *value);
+
+    HRESULT (STDMETHODCALLTYPE *GetIntVector)(
+        ID3D10EffectVectorVariable *This,
+        int *value);
+
+    HRESULT (STDMETHODCALLTYPE *GetFloatVector)(
+        ID3D10EffectVectorVariable *This,
+        float *value);
+
+    HRESULT (STDMETHODCALLTYPE *SetBoolVectorArray)(
+        ID3D10EffectVectorVariable *This,
+        WINBOOL *values,
+        UINT offset,
+        UINT count);
+
+    HRESULT (STDMETHODCALLTYPE *SetIntVectorArray)(
+        ID3D10EffectVectorVariable *This,
+        int *values,
+        UINT offset,
+        UINT count);
+
+    HRESULT (STDMETHODCALLTYPE *SetFloatVectorArray)(
+        ID3D10EffectVectorVariable *This,
+        float *values,
+        UINT offset,
+        UINT count);
+
+    HRESULT (STDMETHODCALLTYPE *GetBoolVectorArray)(
+        ID3D10EffectVectorVariable *This,
+        WINBOOL *values,
+        UINT offset,
+        UINT count);
+
+    HRESULT (STDMETHODCALLTYPE *GetIntVectorArray)(
+        ID3D10EffectVectorVariable *This,
+        int *values,
+        UINT offset,
+        UINT count);
+
+    HRESULT (STDMETHODCALLTYPE *GetFloatVectorArray)(
+        ID3D10EffectVectorVariable *This,
+        float *values,
+        UINT offset,
+        UINT count);
+
+    END_INTERFACE
+} ID3D10EffectVectorVariableVtbl;
+
+interface ID3D10EffectVectorVariable {
+    CONST_VTBL ID3D10EffectVectorVariableVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** ID3D10EffectVariable methods ***/
+#define ID3D10EffectVectorVariable_IsValid(This) (This)->lpVtbl->IsValid(This)
+#define ID3D10EffectVectorVariable_GetType(This) (This)->lpVtbl->GetType(This)
+#define ID3D10EffectVectorVariable_GetDesc(This,desc) (This)->lpVtbl->GetDesc(This,desc)
+#define ID3D10EffectVectorVariable_GetAnnotationByIndex(This,index) (This)->lpVtbl->GetAnnotationByIndex(This,index)
+#define ID3D10EffectVectorVariable_GetAnnotationByName(This,name) (This)->lpVtbl->GetAnnotationByName(This,name)
+#define ID3D10EffectVectorVariable_GetMemberByIndex(This,index) (This)->lpVtbl->GetMemberByIndex(This,index)
+#define ID3D10EffectVectorVariable_GetMemberByName(This,name) (This)->lpVtbl->GetMemberByName(This,name)
+#define ID3D10EffectVectorVariable_GetMemberBySemantic(This,semantic) (This)->lpVtbl->GetMemberBySemantic(This,semantic)
+#define ID3D10EffectVectorVariable_GetElement(This,index) (This)->lpVtbl->GetElement(This,index)
+#define ID3D10EffectVectorVariable_GetParentConstantBuffer(This) (This)->lpVtbl->GetParentConstantBuffer(This)
+#define ID3D10EffectVectorVariable_AsScalar(This) (This)->lpVtbl->AsScalar(This)
+#define ID3D10EffectVectorVariable_AsVector(This) (This)->lpVtbl->AsVector(This)
+#define ID3D10EffectVectorVariable_AsMatrix(This) (This)->lpVtbl->AsMatrix(This)
+#define ID3D10EffectVectorVariable_AsString(This) (This)->lpVtbl->AsString(This)
+#define ID3D10EffectVectorVariable_AsShaderResource(This) (This)->lpVtbl->AsShaderResource(This)
+#define ID3D10EffectVectorVariable_AsRenderTargetView(This) (This)->lpVtbl->AsRenderTargetView(This)
+#define ID3D10EffectVectorVariable_AsDepthStencilView(This) (This)->lpVtbl->AsDepthStencilView(This)
+#define ID3D10EffectVectorVariable_AsConstantBuffer(This) (This)->lpVtbl->AsConstantBuffer(This)
+#define ID3D10EffectVectorVariable_AsShader(This) (This)->lpVtbl->AsShader(This)
+#define ID3D10EffectVectorVariable_AsBlend(This) (This)->lpVtbl->AsBlend(This)
+#define ID3D10EffectVectorVariable_AsDepthStencil(This) (This)->lpVtbl->AsDepthStencil(This)
+#define ID3D10EffectVectorVariable_AsRasterizer(This) (This)->lpVtbl->AsRasterizer(This)
+#define ID3D10EffectVectorVariable_AsSampler(This) (This)->lpVtbl->AsSampler(This)
+#define ID3D10EffectVectorVariable_SetRawValue(This,data,offset,count) (This)->lpVtbl->SetRawValue(This,data,offset,count)
+#define ID3D10EffectVectorVariable_GetRawValue(This,data,offset,count) (This)->lpVtbl->GetRawValue(This,data,offset,count)
+/*** ID3D10EffectVectorVariable methods ***/
+#define ID3D10EffectVectorVariable_SetBoolVector(This,value) (This)->lpVtbl->SetBoolVector(This,value)
+#define ID3D10EffectVectorVariable_SetIntVector(This,value) (This)->lpVtbl->SetIntVector(This,value)
+#define ID3D10EffectVectorVariable_SetFloatVector(This,value) (This)->lpVtbl->SetFloatVector(This,value)
+#define ID3D10EffectVectorVariable_GetBoolVector(This,value) (This)->lpVtbl->GetBoolVector(This,value)
+#define ID3D10EffectVectorVariable_GetIntVector(This,value) (This)->lpVtbl->GetIntVector(This,value)
+#define ID3D10EffectVectorVariable_GetFloatVector(This,value) (This)->lpVtbl->GetFloatVector(This,value)
+#define ID3D10EffectVectorVariable_SetBoolVectorArray(This,values,offset,count) (This)->lpVtbl->SetBoolVectorArray(This,values,offset,count)
+#define ID3D10EffectVectorVariable_SetIntVectorArray(This,values,offset,count) (This)->lpVtbl->SetIntVectorArray(This,values,offset,count)
+#define ID3D10EffectVectorVariable_SetFloatVectorArray(This,values,offset,count) (This)->lpVtbl->SetFloatVectorArray(This,values,offset,count)
+#define ID3D10EffectVectorVariable_GetBoolVectorArray(This,values,offset,count) (This)->lpVtbl->GetBoolVectorArray(This,values,offset,count)
+#define ID3D10EffectVectorVariable_GetIntVectorArray(This,values,offset,count) (This)->lpVtbl->GetIntVectorArray(This,values,offset,count)
+#define ID3D10EffectVectorVariable_GetFloatVectorArray(This,values,offset,count) (This)->lpVtbl->GetFloatVectorArray(This,values,offset,count)
+#else
+/*** ID3D10EffectVariable methods ***/
+static __WIDL_INLINE WINBOOL ID3D10EffectVectorVariable_IsValid(ID3D10EffectVectorVariable* This) {
+    return This->lpVtbl->IsValid(This);
+}
+static __WIDL_INLINE ID3D10EffectType * ID3D10EffectVectorVariable_GetType(ID3D10EffectVectorVariable* This) {
+    return This->lpVtbl->GetType(This);
+}
+static __WIDL_INLINE HRESULT ID3D10EffectVectorVariable_GetDesc(ID3D10EffectVectorVariable* This,D3D10_EFFECT_VARIABLE_DESC *desc) {
+    return This->lpVtbl->GetDesc(This,desc);
+}
+static __WIDL_INLINE ID3D10EffectVariable * ID3D10EffectVectorVariable_GetAnnotationByIndex(ID3D10EffectVectorVariable* This,UINT index) {
+    return This->lpVtbl->GetAnnotationByIndex(This,index);
+}
+static __WIDL_INLINE ID3D10EffectVariable * ID3D10EffectVectorVariable_GetAnnotationByName(ID3D10EffectVectorVariable* This,const char *name) {
+    return This->lpVtbl->GetAnnotationByName(This,name);
+}
+static __WIDL_INLINE ID3D10EffectVariable * ID3D10EffectVectorVariable_GetMemberByIndex(ID3D10EffectVectorVariable* This,UINT index) {
+    return This->lpVtbl->GetMemberByIndex(This,index);
+}
+static __WIDL_INLINE ID3D10EffectVariable * ID3D10EffectVectorVariable_GetMemberByName(ID3D10EffectVectorVariable* This,const char *name) {
+    return This->lpVtbl->GetMemberByName(This,name);
+}
+static __WIDL_INLINE ID3D10EffectVariable * ID3D10EffectVectorVariable_GetMemberBySemantic(ID3D10EffectVectorVariable* This,const char *semantic) {
+    return This->lpVtbl->GetMemberBySemantic(This,semantic);
+}
+static __WIDL_INLINE ID3D10EffectVariable * ID3D10EffectVectorVariable_GetElement(ID3D10EffectVectorVariable* This,UINT index) {
+    return This->lpVtbl->GetElement(This,index);
+}
+static __WIDL_INLINE ID3D10EffectConstantBuffer * ID3D10EffectVectorVariable_GetParentConstantBuffer(ID3D10EffectVectorVariable* This) {
+    return This->lpVtbl->GetParentConstantBuffer(This);
+}
+static __WIDL_INLINE ID3D10EffectScalarVariable * ID3D10EffectVectorVariable_AsScalar(ID3D10EffectVectorVariable* This) {
+    return This->lpVtbl->AsScalar(This);
+}
+static __WIDL_INLINE ID3D10EffectVectorVariable * ID3D10EffectVectorVariable_AsVector(ID3D10EffectVectorVariable* This) {
+    return This->lpVtbl->AsVector(This);
+}
+static __WIDL_INLINE ID3D10EffectMatrixVariable * ID3D10EffectVectorVariable_AsMatrix(ID3D10EffectVectorVariable* This) {
+    return This->lpVtbl->AsMatrix(This);
+}
+static __WIDL_INLINE ID3D10EffectStringVariable * ID3D10EffectVectorVariable_AsString(ID3D10EffectVectorVariable* This) {
+    return This->lpVtbl->AsString(This);
+}
+static __WIDL_INLINE ID3D10EffectShaderResourceVariable * ID3D10EffectVectorVariable_AsShaderResource(ID3D10EffectVectorVariable* This) {
+    return This->lpVtbl->AsShaderResource(This);
+}
+static __WIDL_INLINE ID3D10EffectRenderTargetViewVariable * ID3D10EffectVectorVariable_AsRenderTargetView(ID3D10EffectVectorVariable* This) {
+    return This->lpVtbl->AsRenderTargetView(This);
+}
+static __WIDL_INLINE ID3D10EffectDepthStencilViewVariable * ID3D10EffectVectorVariable_AsDepthStencilView(ID3D10EffectVectorVariable* This) {
+    return This->lpVtbl->AsDepthStencilView(This);
+}
+static __WIDL_INLINE ID3D10EffectConstantBuffer * ID3D10EffectVectorVariable_AsConstantBuffer(ID3D10EffectVectorVariable* This) {
+    return This->lpVtbl->AsConstantBuffer(This);
+}
+static __WIDL_INLINE ID3D10EffectShaderVariable * ID3D10EffectVectorVariable_AsShader(ID3D10EffectVectorVariable* This) {
+    return This->lpVtbl->AsShader(This);
+}
+static __WIDL_INLINE ID3D10EffectBlendVariable * ID3D10EffectVectorVariable_AsBlend(ID3D10EffectVectorVariable* This) {
+    return This->lpVtbl->AsBlend(This);
+}
+static __WIDL_INLINE ID3D10EffectDepthStencilVariable * ID3D10EffectVectorVariable_AsDepthStencil(ID3D10EffectVectorVariable* This) {
+    return This->lpVtbl->AsDepthStencil(This);
+}
+static __WIDL_INLINE ID3D10EffectRasterizerVariable * ID3D10EffectVectorVariable_AsRasterizer(ID3D10EffectVectorVariable* This) {
+    return This->lpVtbl->AsRasterizer(This);
+}
+static __WIDL_INLINE ID3D10EffectSamplerVariable * ID3D10EffectVectorVariable_AsSampler(ID3D10EffectVectorVariable* This) {
+    return This->lpVtbl->AsSampler(This);
+}
+static __WIDL_INLINE HRESULT ID3D10EffectVectorVariable_SetRawValue(ID3D10EffectVectorVariable* This,void *data,UINT offset,UINT count) {
+    return This->lpVtbl->SetRawValue(This,data,offset,count);
+}
+static __WIDL_INLINE HRESULT ID3D10EffectVectorVariable_GetRawValue(ID3D10EffectVectorVariable* This,void *data,UINT offset,UINT count) {
+    return This->lpVtbl->GetRawValue(This,data,offset,count);
+}
+/*** ID3D10EffectVectorVariable methods ***/
+static __WIDL_INLINE HRESULT ID3D10EffectVectorVariable_SetBoolVector(ID3D10EffectVectorVariable* This,WINBOOL *value) {
+    return This->lpVtbl->SetBoolVector(This,value);
+}
+static __WIDL_INLINE HRESULT ID3D10EffectVectorVariable_SetIntVector(ID3D10EffectVectorVariable* This,int *value) {
+    return This->lpVtbl->SetIntVector(This,value);
+}
+static __WIDL_INLINE HRESULT ID3D10EffectVectorVariable_SetFloatVector(ID3D10EffectVectorVariable* This,float *value) {
+    return This->lpVtbl->SetFloatVector(This,value);
+}
+static __WIDL_INLINE HRESULT ID3D10EffectVectorVariable_GetBoolVector(ID3D10EffectVectorVariable* This,WINBOOL *value) {
+    return This->lpVtbl->GetBoolVector(This,value);
+}
+static __WIDL_INLINE HRESULT ID3D10EffectVectorVariable_GetIntVector(ID3D10EffectVectorVariable* This,int *value) {
+    return This->lpVtbl->GetIntVector(This,value);
+}
+static __WIDL_INLINE HRESULT ID3D10EffectVectorVariable_GetFloatVector(ID3D10EffectVectorVariable* This,float *value) {
+    return This->lpVtbl->GetFloatVector(This,value);
+}
+static __WIDL_INLINE HRESULT ID3D10EffectVectorVariable_SetBoolVectorArray(ID3D10EffectVectorVariable* This,WINBOOL *values,UINT offset,UINT count) {
+    return This->lpVtbl->SetBoolVectorArray(This,values,offset,count);
+}
+static __WIDL_INLINE HRESULT ID3D10EffectVectorVariable_SetIntVectorArray(ID3D10EffectVectorVariable* This,int *values,UINT offset,UINT count) {
+    return This->lpVtbl->SetIntVectorArray(This,values,offset,count);
+}
+static __WIDL_INLINE HRESULT ID3D10EffectVectorVariable_SetFloatVectorArray(ID3D10EffectVectorVariable* This,float *values,UINT offset,UINT count) {
+    return This->lpVtbl->SetFloatVectorArray(This,values,offset,count);
+}
+static __WIDL_INLINE HRESULT ID3D10EffectVectorVariable_GetBoolVectorArray(ID3D10EffectVectorVariable* This,WINBOOL *values,UINT offset,UINT count) {
+    return This->lpVtbl->GetBoolVectorArray(This,values,offset,count);
+}
+static __WIDL_INLINE HRESULT ID3D10EffectVectorVariable_GetIntVectorArray(ID3D10EffectVectorVariable* This,int *values,UINT offset,UINT count) {
+    return This->lpVtbl->GetIntVectorArray(This,values,offset,count);
+}
+static __WIDL_INLINE HRESULT ID3D10EffectVectorVariable_GetFloatVectorArray(ID3D10EffectVectorVariable* This,float *values,UINT offset,UINT count) {
+    return This->lpVtbl->GetFloatVectorArray(This,values,offset,count);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __ID3D10EffectVectorVariable_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * ID3D10EffectMatrixVariable interface
+ */
+#ifndef __ID3D10EffectMatrixVariable_INTERFACE_DEFINED__
+#define __ID3D10EffectMatrixVariable_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_ID3D10EffectMatrixVariable, 0x50666c24, 0xb82f, 0x4eed, 0xa1,0x72, 0x5b,0x6e,0x7e,0x85,0x22,0xe0);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("50666c24-b82f-4eed-a172-5b6e7e8522e0")
+ID3D10EffectMatrixVariable : public ID3D10EffectVariable
+{
+    virtual HRESULT STDMETHODCALLTYPE SetMatrix(
+        float *data) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetMatrix(
+        float *data) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetMatrixArray(
+        float *data,
+        UINT offset,
+        UINT count) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetMatrixArray(
+        float *data,
+        UINT offset,
+        UINT count) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetMatrixTranspose(
+        float *data) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetMatrixTranspose(
+        float *data) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetMatrixTransposeArray(
+        float *data,
+        UINT offset,
+        UINT count) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetMatrixTransposeArray(
+        float *data,
+        UINT offset,
+        UINT count) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(ID3D10EffectMatrixVariable, 0x50666c24, 0xb82f, 0x4eed, 0xa1,0x72, 0x5b,0x6e,0x7e,0x85,0x22,0xe0)
+#endif
+#else
+typedef struct ID3D10EffectMatrixVariableVtbl {
+    BEGIN_INTERFACE
+
+    /*** ID3D10EffectVariable methods ***/
+    WINBOOL (STDMETHODCALLTYPE *IsValid)(
+        ID3D10EffectMatrixVariable *This);
+
+    ID3D10EffectType * (STDMETHODCALLTYPE *GetType)(
+        ID3D10EffectMatrixVariable *This);
+
+    HRESULT (STDMETHODCALLTYPE *GetDesc)(
+        ID3D10EffectMatrixVariable *This,
+        D3D10_EFFECT_VARIABLE_DESC *desc);
+
+    ID3D10EffectVariable * (STDMETHODCALLTYPE *GetAnnotationByIndex)(
+        ID3D10EffectMatrixVariable *This,
+        UINT index);
+
+    ID3D10EffectVariable * (STDMETHODCALLTYPE *GetAnnotationByName)(
+        ID3D10EffectMatrixVariable *This,
+        const char *name);
+
+    ID3D10EffectVariable * (STDMETHODCALLTYPE *GetMemberByIndex)(
+        ID3D10EffectMatrixVariable *This,
+        UINT index);
+
+    ID3D10EffectVariable * (STDMETHODCALLTYPE *GetMemberByName)(
+        ID3D10EffectMatrixVariable *This,
+        const char *name);
+
+    ID3D10EffectVariable * (STDMETHODCALLTYPE *GetMemberBySemantic)(
+        ID3D10EffectMatrixVariable *This,
+        const char *semantic);
+
+    ID3D10EffectVariable * (STDMETHODCALLTYPE *GetElement)(
+        ID3D10EffectMatrixVariable *This,
+        UINT index);
+
+    ID3D10EffectConstantBuffer * (STDMETHODCALLTYPE *GetParentConstantBuffer)(
+        ID3D10EffectMatrixVariable *This);
+
+    ID3D10EffectScalarVariable * (STDMETHODCALLTYPE *AsScalar)(
+        ID3D10EffectMatrixVariable *This);
+
+    ID3D10EffectVectorVariable * (STDMETHODCALLTYPE *AsVector)(
+        ID3D10EffectMatrixVariable *This);
+
+    ID3D10EffectMatrixVariable * (STDMETHODCALLTYPE *AsMatrix)(
+        ID3D10EffectMatrixVariable *This);
+
+    ID3D10EffectStringVariable * (STDMETHODCALLTYPE *AsString)(
+        ID3D10EffectMatrixVariable *This);
+
+    ID3D10EffectShaderResourceVariable * (STDMETHODCALLTYPE *AsShaderResource)(
+        ID3D10EffectMatrixVariable *This);
+
+    ID3D10EffectRenderTargetViewVariable * (STDMETHODCALLTYPE *AsRenderTargetView)(
+        ID3D10EffectMatrixVariable *This);
+
+    ID3D10EffectDepthStencilViewVariable * (STDMETHODCALLTYPE *AsDepthStencilView)(
+        ID3D10EffectMatrixVariable *This);
+
+    ID3D10EffectConstantBuffer * (STDMETHODCALLTYPE *AsConstantBuffer)(
+        ID3D10EffectMatrixVariable *This);
+
+    ID3D10EffectShaderVariable * (STDMETHODCALLTYPE *AsShader)(
+        ID3D10EffectMatrixVariable *This);
+
+    ID3D10EffectBlendVariable * (STDMETHODCALLTYPE *AsBlend)(
+        ID3D10EffectMatrixVariable *This);
+
+    ID3D10EffectDepthStencilVariable * (STDMETHODCALLTYPE *AsDepthStencil)(
+        ID3D10EffectMatrixVariable *This);
+
+    ID3D10EffectRasterizerVariable * (STDMETHODCALLTYPE *AsRasterizer)(
+        ID3D10EffectMatrixVariable *This);
+
+    ID3D10EffectSamplerVariable * (STDMETHODCALLTYPE *AsSampler)(
+        ID3D10EffectMatrixVariable *This);
+
+    HRESULT (STDMETHODCALLTYPE *SetRawValue)(
+        ID3D10EffectMatrixVariable *This,
+        void *data,
+        UINT offset,
+        UINT count);
+
+    HRESULT (STDMETHODCALLTYPE *GetRawValue)(
+        ID3D10EffectMatrixVariable *This,
+        void *data,
+        UINT offset,
+        UINT count);
+
+    /*** ID3D10EffectMatrixVariable methods ***/
+    HRESULT (STDMETHODCALLTYPE *SetMatrix)(
+        ID3D10EffectMatrixVariable *This,
+        float *data);
+
+    HRESULT (STDMETHODCALLTYPE *GetMatrix)(
+        ID3D10EffectMatrixVariable *This,
+        float *data);
+
+    HRESULT (STDMETHODCALLTYPE *SetMatrixArray)(
+        ID3D10EffectMatrixVariable *This,
+        float *data,
+        UINT offset,
+        UINT count);
+
+    HRESULT (STDMETHODCALLTYPE *GetMatrixArray)(
+        ID3D10EffectMatrixVariable *This,
+        float *data,
+        UINT offset,
+        UINT count);
+
+    HRESULT (STDMETHODCALLTYPE *SetMatrixTranspose)(
+        ID3D10EffectMatrixVariable *This,
+        float *data);
+
+    HRESULT (STDMETHODCALLTYPE *GetMatrixTranspose)(
+        ID3D10EffectMatrixVariable *This,
+        float *data);
+
+    HRESULT (STDMETHODCALLTYPE *SetMatrixTransposeArray)(
+        ID3D10EffectMatrixVariable *This,
+        float *data,
+        UINT offset,
+        UINT count);
+
+    HRESULT (STDMETHODCALLTYPE *GetMatrixTransposeArray)(
+        ID3D10EffectMatrixVariable *This,
+        float *data,
+        UINT offset,
+        UINT count);
+
+    END_INTERFACE
+} ID3D10EffectMatrixVariableVtbl;
+
+interface ID3D10EffectMatrixVariable {
+    CONST_VTBL ID3D10EffectMatrixVariableVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** ID3D10EffectVariable methods ***/
+#define ID3D10EffectMatrixVariable_IsValid(This) (This)->lpVtbl->IsValid(This)
+#define ID3D10EffectMatrixVariable_GetType(This) (This)->lpVtbl->GetType(This)
+#define ID3D10EffectMatrixVariable_GetDesc(This,desc) (This)->lpVtbl->GetDesc(This,desc)
+#define ID3D10EffectMatrixVariable_GetAnnotationByIndex(This,index) (This)->lpVtbl->GetAnnotationByIndex(This,index)
+#define ID3D10EffectMatrixVariable_GetAnnotationByName(This,name) (This)->lpVtbl->GetAnnotationByName(This,name)
+#define ID3D10EffectMatrixVariable_GetMemberByIndex(This,index) (This)->lpVtbl->GetMemberByIndex(This,index)
+#define ID3D10EffectMatrixVariable_GetMemberByName(This,name) (This)->lpVtbl->GetMemberByName(This,name)
+#define ID3D10EffectMatrixVariable_GetMemberBySemantic(This,semantic) (This)->lpVtbl->GetMemberBySemantic(This,semantic)
+#define ID3D10EffectMatrixVariable_GetElement(This,index) (This)->lpVtbl->GetElement(This,index)
+#define ID3D10EffectMatrixVariable_GetParentConstantBuffer(This) (This)->lpVtbl->GetParentConstantBuffer(This)
+#define ID3D10EffectMatrixVariable_AsScalar(This) (This)->lpVtbl->AsScalar(This)
+#define ID3D10EffectMatrixVariable_AsVector(This) (This)->lpVtbl->AsVector(This)
+#define ID3D10EffectMatrixVariable_AsMatrix(This) (This)->lpVtbl->AsMatrix(This)
+#define ID3D10EffectMatrixVariable_AsString(This) (This)->lpVtbl->AsString(This)
+#define ID3D10EffectMatrixVariable_AsShaderResource(This) (This)->lpVtbl->AsShaderResource(This)
+#define ID3D10EffectMatrixVariable_AsRenderTargetView(This) (This)->lpVtbl->AsRenderTargetView(This)
+#define ID3D10EffectMatrixVariable_AsDepthStencilView(This) (This)->lpVtbl->AsDepthStencilView(This)
+#define ID3D10EffectMatrixVariable_AsConstantBuffer(This) (This)->lpVtbl->AsConstantBuffer(This)
+#define ID3D10EffectMatrixVariable_AsShader(This) (This)->lpVtbl->AsShader(This)
+#define ID3D10EffectMatrixVariable_AsBlend(This) (This)->lpVtbl->AsBlend(This)
+#define ID3D10EffectMatrixVariable_AsDepthStencil(This) (This)->lpVtbl->AsDepthStencil(This)
+#define ID3D10EffectMatrixVariable_AsRasterizer(This) (This)->lpVtbl->AsRasterizer(This)
+#define ID3D10EffectMatrixVariable_AsSampler(This) (This)->lpVtbl->AsSampler(This)
+#define ID3D10EffectMatrixVariable_SetRawValue(This,data,offset,count) (This)->lpVtbl->SetRawValue(This,data,offset,count)
+#define ID3D10EffectMatrixVariable_GetRawValue(This,data,offset,count) (This)->lpVtbl->GetRawValue(This,data,offset,count)
+/*** ID3D10EffectMatrixVariable methods ***/
+#define ID3D10EffectMatrixVariable_SetMatrix(This,data) (This)->lpVtbl->SetMatrix(This,data)
+#define ID3D10EffectMatrixVariable_GetMatrix(This,data) (This)->lpVtbl->GetMatrix(This,data)
+#define ID3D10EffectMatrixVariable_SetMatrixArray(This,data,offset,count) (This)->lpVtbl->SetMatrixArray(This,data,offset,count)
+#define ID3D10EffectMatrixVariable_GetMatrixArray(This,data,offset,count) (This)->lpVtbl->GetMatrixArray(This,data,offset,count)
+#define ID3D10EffectMatrixVariable_SetMatrixTranspose(This,data) (This)->lpVtbl->SetMatrixTranspose(This,data)
+#define ID3D10EffectMatrixVariable_GetMatrixTranspose(This,data) (This)->lpVtbl->GetMatrixTranspose(This,data)
+#define ID3D10EffectMatrixVariable_SetMatrixTransposeArray(This,data,offset,count) (This)->lpVtbl->SetMatrixTransposeArray(This,data,offset,count)
+#define ID3D10EffectMatrixVariable_GetMatrixTransposeArray(This,data,offset,count) (This)->lpVtbl->GetMatrixTransposeArray(This,data,offset,count)
+#else
+/*** ID3D10EffectVariable methods ***/
+static __WIDL_INLINE WINBOOL ID3D10EffectMatrixVariable_IsValid(ID3D10EffectMatrixVariable* This) {
+    return This->lpVtbl->IsValid(This);
+}
+static __WIDL_INLINE ID3D10EffectType * ID3D10EffectMatrixVariable_GetType(ID3D10EffectMatrixVariable* This) {
+    return This->lpVtbl->GetType(This);
+}
+static __WIDL_INLINE HRESULT ID3D10EffectMatrixVariable_GetDesc(ID3D10EffectMatrixVariable* This,D3D10_EFFECT_VARIABLE_DESC *desc) {
+    return This->lpVtbl->GetDesc(This,desc);
+}
+static __WIDL_INLINE ID3D10EffectVariable * ID3D10EffectMatrixVariable_GetAnnotationByIndex(ID3D10EffectMatrixVariable* This,UINT index) {
+    return This->lpVtbl->GetAnnotationByIndex(This,index);
+}
+static __WIDL_INLINE ID3D10EffectVariable * ID3D10EffectMatrixVariable_GetAnnotationByName(ID3D10EffectMatrixVariable* This,const char *name) {
+    return This->lpVtbl->GetAnnotationByName(This,name);
+}
+static __WIDL_INLINE ID3D10EffectVariable * ID3D10EffectMatrixVariable_GetMemberByIndex(ID3D10EffectMatrixVariable* This,UINT index) {
+    return This->lpVtbl->GetMemberByIndex(This,index);
+}
+static __WIDL_INLINE ID3D10EffectVariable * ID3D10EffectMatrixVariable_GetMemberByName(ID3D10EffectMatrixVariable* This,const char *name) {
+    return This->lpVtbl->GetMemberByName(This,name);
+}
+static __WIDL_INLINE ID3D10EffectVariable * ID3D10EffectMatrixVariable_GetMemberBySemantic(ID3D10EffectMatrixVariable* This,const char *semantic) {
+    return This->lpVtbl->GetMemberBySemantic(This,semantic);
+}
+static __WIDL_INLINE ID3D10EffectVariable * ID3D10EffectMatrixVariable_GetElement(ID3D10EffectMatrixVariable* This,UINT index) {
+    return This->lpVtbl->GetElement(This,index);
+}
+static __WIDL_INLINE ID3D10EffectConstantBuffer * ID3D10EffectMatrixVariable_GetParentConstantBuffer(ID3D10EffectMatrixVariable* This) {
+    return This->lpVtbl->GetParentConstantBuffer(This);
+}
+static __WIDL_INLINE ID3D10EffectScalarVariable * ID3D10EffectMatrixVariable_AsScalar(ID3D10EffectMatrixVariable* This) {
+    return This->lpVtbl->AsScalar(This);
+}
+static __WIDL_INLINE ID3D10EffectVectorVariable * ID3D10EffectMatrixVariable_AsVector(ID3D10EffectMatrixVariable* This) {
+    return This->lpVtbl->AsVector(This);
+}
+static __WIDL_INLINE ID3D10EffectMatrixVariable * ID3D10EffectMatrixVariable_AsMatrix(ID3D10EffectMatrixVariable* This) {
+    return This->lpVtbl->AsMatrix(This);
+}
+static __WIDL_INLINE ID3D10EffectStringVariable * ID3D10EffectMatrixVariable_AsString(ID3D10EffectMatrixVariable* This) {
+    return This->lpVtbl->AsString(This);
+}
+static __WIDL_INLINE ID3D10EffectShaderResourceVariable * ID3D10EffectMatrixVariable_AsShaderResource(ID3D10EffectMatrixVariable* This) {
+    return This->lpVtbl->AsShaderResource(This);
+}
+static __WIDL_INLINE ID3D10EffectRenderTargetViewVariable * ID3D10EffectMatrixVariable_AsRenderTargetView(ID3D10EffectMatrixVariable* This) {
+    return This->lpVtbl->AsRenderTargetView(This);
+}
+static __WIDL_INLINE ID3D10EffectDepthStencilViewVariable * ID3D10EffectMatrixVariable_AsDepthStencilView(ID3D10EffectMatrixVariable* This) {
+    return This->lpVtbl->AsDepthStencilView(This);
+}
+static __WIDL_INLINE ID3D10EffectConstantBuffer * ID3D10EffectMatrixVariable_AsConstantBuffer(ID3D10EffectMatrixVariable* This) {
+    return This->lpVtbl->AsConstantBuffer(This);
+}
+static __WIDL_INLINE ID3D10EffectShaderVariable * ID3D10EffectMatrixVariable_AsShader(ID3D10EffectMatrixVariable* This) {
+    return This->lpVtbl->AsShader(This);
+}
+static __WIDL_INLINE ID3D10EffectBlendVariable * ID3D10EffectMatrixVariable_AsBlend(ID3D10EffectMatrixVariable* This) {
+    return This->lpVtbl->AsBlend(This);
+}
+static __WIDL_INLINE ID3D10EffectDepthStencilVariable * ID3D10EffectMatrixVariable_AsDepthStencil(ID3D10EffectMatrixVariable* This) {
+    return This->lpVtbl->AsDepthStencil(This);
+}
+static __WIDL_INLINE ID3D10EffectRasterizerVariable * ID3D10EffectMatrixVariable_AsRasterizer(ID3D10EffectMatrixVariable* This) {
+    return This->lpVtbl->AsRasterizer(This);
+}
+static __WIDL_INLINE ID3D10EffectSamplerVariable * ID3D10EffectMatrixVariable_AsSampler(ID3D10EffectMatrixVariable* This) {
+    return This->lpVtbl->AsSampler(This);
+}
+static __WIDL_INLINE HRESULT ID3D10EffectMatrixVariable_SetRawValue(ID3D10EffectMatrixVariable* This,void *data,UINT offset,UINT count) {
+    return This->lpVtbl->SetRawValue(This,data,offset,count);
+}
+static __WIDL_INLINE HRESULT ID3D10EffectMatrixVariable_GetRawValue(ID3D10EffectMatrixVariable* This,void *data,UINT offset,UINT count) {
+    return This->lpVtbl->GetRawValue(This,data,offset,count);
+}
+/*** ID3D10EffectMatrixVariable methods ***/
+static __WIDL_INLINE HRESULT ID3D10EffectMatrixVariable_SetMatrix(ID3D10EffectMatrixVariable* This,float *data) {
+    return This->lpVtbl->SetMatrix(This,data);
+}
+static __WIDL_INLINE HRESULT ID3D10EffectMatrixVariable_GetMatrix(ID3D10EffectMatrixVariable* This,float *data) {
+    return This->lpVtbl->GetMatrix(This,data);
+}
+static __WIDL_INLINE HRESULT ID3D10EffectMatrixVariable_SetMatrixArray(ID3D10EffectMatrixVariable* This,float *data,UINT offset,UINT count) {
+    return This->lpVtbl->SetMatrixArray(This,data,offset,count);
+}
+static __WIDL_INLINE HRESULT ID3D10EffectMatrixVariable_GetMatrixArray(ID3D10EffectMatrixVariable* This,float *data,UINT offset,UINT count) {
+    return This->lpVtbl->GetMatrixArray(This,data,offset,count);
+}
+static __WIDL_INLINE HRESULT ID3D10EffectMatrixVariable_SetMatrixTranspose(ID3D10EffectMatrixVariable* This,float *data) {
+    return This->lpVtbl->SetMatrixTranspose(This,data);
+}
+static __WIDL_INLINE HRESULT ID3D10EffectMatrixVariable_GetMatrixTranspose(ID3D10EffectMatrixVariable* This,float *data) {
+    return This->lpVtbl->GetMatrixTranspose(This,data);
+}
+static __WIDL_INLINE HRESULT ID3D10EffectMatrixVariable_SetMatrixTransposeArray(ID3D10EffectMatrixVariable* This,float *data,UINT offset,UINT count) {
+    return This->lpVtbl->SetMatrixTransposeArray(This,data,offset,count);
+}
+static __WIDL_INLINE HRESULT ID3D10EffectMatrixVariable_GetMatrixTransposeArray(ID3D10EffectMatrixVariable* This,float *data,UINT offset,UINT count) {
+    return This->lpVtbl->GetMatrixTransposeArray(This,data,offset,count);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __ID3D10EffectMatrixVariable_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * ID3D10EffectStringVariable interface
+ */
+#ifndef __ID3D10EffectStringVariable_INTERFACE_DEFINED__
+#define __ID3D10EffectStringVariable_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_ID3D10EffectStringVariable, 0x71417501, 0x8df9, 0x4e0a, 0xa7,0x8a, 0x25,0x5f,0x97,0x56,0xba,0xff);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("71417501-8df9-4e0a-a78a-255f9756baff")
+ID3D10EffectStringVariable : public ID3D10EffectVariable
+{
+    virtual HRESULT STDMETHODCALLTYPE GetString(
+        const char **str) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetStringArray(
+        const char **strs,
+        UINT offset,
+        UINT count) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(ID3D10EffectStringVariable, 0x71417501, 0x8df9, 0x4e0a, 0xa7,0x8a, 0x25,0x5f,0x97,0x56,0xba,0xff)
+#endif
+#else
+typedef struct ID3D10EffectStringVariableVtbl {
+    BEGIN_INTERFACE
+
+    /*** ID3D10EffectVariable methods ***/
+    WINBOOL (STDMETHODCALLTYPE *IsValid)(
+        ID3D10EffectStringVariable *This);
+
+    ID3D10EffectType * (STDMETHODCALLTYPE *GetType)(
+        ID3D10EffectStringVariable *This);
+
+    HRESULT (STDMETHODCALLTYPE *GetDesc)(
+        ID3D10EffectStringVariable *This,
+        D3D10_EFFECT_VARIABLE_DESC *desc);
+
+    ID3D10EffectVariable * (STDMETHODCALLTYPE *GetAnnotationByIndex)(
+        ID3D10EffectStringVariable *This,
+        UINT index);
+
+    ID3D10EffectVariable * (STDMETHODCALLTYPE *GetAnnotationByName)(
+        ID3D10EffectStringVariable *This,
+        const char *name);
+
+    ID3D10EffectVariable * (STDMETHODCALLTYPE *GetMemberByIndex)(
+        ID3D10EffectStringVariable *This,
+        UINT index);
+
+    ID3D10EffectVariable * (STDMETHODCALLTYPE *GetMemberByName)(
+        ID3D10EffectStringVariable *This,
+        const char *name);
+
+    ID3D10EffectVariable * (STDMETHODCALLTYPE *GetMemberBySemantic)(
+        ID3D10EffectStringVariable *This,
+        const char *semantic);
+
+    ID3D10EffectVariable * (STDMETHODCALLTYPE *GetElement)(
+        ID3D10EffectStringVariable *This,
+        UINT index);
+
+    ID3D10EffectConstantBuffer * (STDMETHODCALLTYPE *GetParentConstantBuffer)(
+        ID3D10EffectStringVariable *This);
+
+    ID3D10EffectScalarVariable * (STDMETHODCALLTYPE *AsScalar)(
+        ID3D10EffectStringVariable *This);
+
+    ID3D10EffectVectorVariable * (STDMETHODCALLTYPE *AsVector)(
+        ID3D10EffectStringVariable *This);
+
+    ID3D10EffectMatrixVariable * (STDMETHODCALLTYPE *AsMatrix)(
+        ID3D10EffectStringVariable *This);
+
+    ID3D10EffectStringVariable * (STDMETHODCALLTYPE *AsString)(
+        ID3D10EffectStringVariable *This);
+
+    ID3D10EffectShaderResourceVariable * (STDMETHODCALLTYPE *AsShaderResource)(
+        ID3D10EffectStringVariable *This);
+
+    ID3D10EffectRenderTargetViewVariable * (STDMETHODCALLTYPE *AsRenderTargetView)(
+        ID3D10EffectStringVariable *This);
+
+    ID3D10EffectDepthStencilViewVariable * (STDMETHODCALLTYPE *AsDepthStencilView)(
+        ID3D10EffectStringVariable *This);
+
+    ID3D10EffectConstantBuffer * (STDMETHODCALLTYPE *AsConstantBuffer)(
+        ID3D10EffectStringVariable *This);
+
+    ID3D10EffectShaderVariable * (STDMETHODCALLTYPE *AsShader)(
+        ID3D10EffectStringVariable *This);
+
+    ID3D10EffectBlendVariable * (STDMETHODCALLTYPE *AsBlend)(
+        ID3D10EffectStringVariable *This);
+
+    ID3D10EffectDepthStencilVariable * (STDMETHODCALLTYPE *AsDepthStencil)(
+        ID3D10EffectStringVariable *This);
+
+    ID3D10EffectRasterizerVariable * (STDMETHODCALLTYPE *AsRasterizer)(
+        ID3D10EffectStringVariable *This);
+
+    ID3D10EffectSamplerVariable * (STDMETHODCALLTYPE *AsSampler)(
+        ID3D10EffectStringVariable *This);
+
+    HRESULT (STDMETHODCALLTYPE *SetRawValue)(
+        ID3D10EffectStringVariable *This,
+        void *data,
+        UINT offset,
+        UINT count);
+
+    HRESULT (STDMETHODCALLTYPE *GetRawValue)(
+        ID3D10EffectStringVariable *This,
+        void *data,
+        UINT offset,
+        UINT count);
+
+    /*** ID3D10EffectStringVariable methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetString)(
+        ID3D10EffectStringVariable *This,
+        const char **str);
+
+    HRESULT (STDMETHODCALLTYPE *GetStringArray)(
+        ID3D10EffectStringVariable *This,
+        const char **strs,
+        UINT offset,
+        UINT count);
+
+    END_INTERFACE
+} ID3D10EffectStringVariableVtbl;
+
+interface ID3D10EffectStringVariable {
+    CONST_VTBL ID3D10EffectStringVariableVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** ID3D10EffectVariable methods ***/
+#define ID3D10EffectStringVariable_IsValid(This) (This)->lpVtbl->IsValid(This)
+#define ID3D10EffectStringVariable_GetType(This) (This)->lpVtbl->GetType(This)
+#define ID3D10EffectStringVariable_GetDesc(This,desc) (This)->lpVtbl->GetDesc(This,desc)
+#define ID3D10EffectStringVariable_GetAnnotationByIndex(This,index) (This)->lpVtbl->GetAnnotationByIndex(This,index)
+#define ID3D10EffectStringVariable_GetAnnotationByName(This,name) (This)->lpVtbl->GetAnnotationByName(This,name)
+#define ID3D10EffectStringVariable_GetMemberByIndex(This,index) (This)->lpVtbl->GetMemberByIndex(This,index)
+#define ID3D10EffectStringVariable_GetMemberByName(This,name) (This)->lpVtbl->GetMemberByName(This,name)
+#define ID3D10EffectStringVariable_GetMemberBySemantic(This,semantic) (This)->lpVtbl->GetMemberBySemantic(This,semantic)
+#define ID3D10EffectStringVariable_GetElement(This,index) (This)->lpVtbl->GetElement(This,index)
+#define ID3D10EffectStringVariable_GetParentConstantBuffer(This) (This)->lpVtbl->GetParentConstantBuffer(This)
+#define ID3D10EffectStringVariable_AsScalar(This) (This)->lpVtbl->AsScalar(This)
+#define ID3D10EffectStringVariable_AsVector(This) (This)->lpVtbl->AsVector(This)
+#define ID3D10EffectStringVariable_AsMatrix(This) (This)->lpVtbl->AsMatrix(This)
+#define ID3D10EffectStringVariable_AsString(This) (This)->lpVtbl->AsString(This)
+#define ID3D10EffectStringVariable_AsShaderResource(This) (This)->lpVtbl->AsShaderResource(This)
+#define ID3D10EffectStringVariable_AsRenderTargetView(This) (This)->lpVtbl->AsRenderTargetView(This)
+#define ID3D10EffectStringVariable_AsDepthStencilView(This) (This)->lpVtbl->AsDepthStencilView(This)
+#define ID3D10EffectStringVariable_AsConstantBuffer(This) (This)->lpVtbl->AsConstantBuffer(This)
+#define ID3D10EffectStringVariable_AsShader(This) (This)->lpVtbl->AsShader(This)
+#define ID3D10EffectStringVariable_AsBlend(This) (This)->lpVtbl->AsBlend(This)
+#define ID3D10EffectStringVariable_AsDepthStencil(This) (This)->lpVtbl->AsDepthStencil(This)
+#define ID3D10EffectStringVariable_AsRasterizer(This) (This)->lpVtbl->AsRasterizer(This)
+#define ID3D10EffectStringVariable_AsSampler(This) (This)->lpVtbl->AsSampler(This)
+#define ID3D10EffectStringVariable_SetRawValue(This,data,offset,count) (This)->lpVtbl->SetRawValue(This,data,offset,count)
+#define ID3D10EffectStringVariable_GetRawValue(This,data,offset,count) (This)->lpVtbl->GetRawValue(This,data,offset,count)
+/*** ID3D10EffectStringVariable methods ***/
+#define ID3D10EffectStringVariable_GetString(This,str) (This)->lpVtbl->GetString(This,str)
+#define ID3D10EffectStringVariable_GetStringArray(This,strs,offset,count) (This)->lpVtbl->GetStringArray(This,strs,offset,count)
+#else
+/*** ID3D10EffectVariable methods ***/
+static __WIDL_INLINE WINBOOL ID3D10EffectStringVariable_IsValid(ID3D10EffectStringVariable* This) {
+    return This->lpVtbl->IsValid(This);
+}
+static __WIDL_INLINE ID3D10EffectType * ID3D10EffectStringVariable_GetType(ID3D10EffectStringVariable* This) {
+    return This->lpVtbl->GetType(This);
+}
+static __WIDL_INLINE HRESULT ID3D10EffectStringVariable_GetDesc(ID3D10EffectStringVariable* This,D3D10_EFFECT_VARIABLE_DESC *desc) {
+    return This->lpVtbl->GetDesc(This,desc);
+}
+static __WIDL_INLINE ID3D10EffectVariable * ID3D10EffectStringVariable_GetAnnotationByIndex(ID3D10EffectStringVariable* This,UINT index) {
+    return This->lpVtbl->GetAnnotationByIndex(This,index);
+}
+static __WIDL_INLINE ID3D10EffectVariable * ID3D10EffectStringVariable_GetAnnotationByName(ID3D10EffectStringVariable* This,const char *name) {
+    return This->lpVtbl->GetAnnotationByName(This,name);
+}
+static __WIDL_INLINE ID3D10EffectVariable * ID3D10EffectStringVariable_GetMemberByIndex(ID3D10EffectStringVariable* This,UINT index) {
+    return This->lpVtbl->GetMemberByIndex(This,index);
+}
+static __WIDL_INLINE ID3D10EffectVariable * ID3D10EffectStringVariable_GetMemberByName(ID3D10EffectStringVariable* This,const char *name) {
+    return This->lpVtbl->GetMemberByName(This,name);
+}
+static __WIDL_INLINE ID3D10EffectVariable * ID3D10EffectStringVariable_GetMemberBySemantic(ID3D10EffectStringVariable* This,const char *semantic) {
+    return This->lpVtbl->GetMemberBySemantic(This,semantic);
+}
+static __WIDL_INLINE ID3D10EffectVariable * ID3D10EffectStringVariable_GetElement(ID3D10EffectStringVariable* This,UINT index) {
+    return This->lpVtbl->GetElement(This,index);
+}
+static __WIDL_INLINE ID3D10EffectConstantBuffer * ID3D10EffectStringVariable_GetParentConstantBuffer(ID3D10EffectStringVariable* This) {
+    return This->lpVtbl->GetParentConstantBuffer(This);
+}
+static __WIDL_INLINE ID3D10EffectScalarVariable * ID3D10EffectStringVariable_AsScalar(ID3D10EffectStringVariable* This) {
+    return This->lpVtbl->AsScalar(This);
+}
+static __WIDL_INLINE ID3D10EffectVectorVariable * ID3D10EffectStringVariable_AsVector(ID3D10EffectStringVariable* This) {
+    return This->lpVtbl->AsVector(This);
+}
+static __WIDL_INLINE ID3D10EffectMatrixVariable * ID3D10EffectStringVariable_AsMatrix(ID3D10EffectStringVariable* This) {
+    return This->lpVtbl->AsMatrix(This);
+}
+static __WIDL_INLINE ID3D10EffectStringVariable * ID3D10EffectStringVariable_AsString(ID3D10EffectStringVariable* This) {
+    return This->lpVtbl->AsString(This);
+}
+static __WIDL_INLINE ID3D10EffectShaderResourceVariable * ID3D10EffectStringVariable_AsShaderResource(ID3D10EffectStringVariable* This) {
+    return This->lpVtbl->AsShaderResource(This);
+}
+static __WIDL_INLINE ID3D10EffectRenderTargetViewVariable * ID3D10EffectStringVariable_AsRenderTargetView(ID3D10EffectStringVariable* This) {
+    return This->lpVtbl->AsRenderTargetView(This);
+}
+static __WIDL_INLINE ID3D10EffectDepthStencilViewVariable * ID3D10EffectStringVariable_AsDepthStencilView(ID3D10EffectStringVariable* This) {
+    return This->lpVtbl->AsDepthStencilView(This);
+}
+static __WIDL_INLINE ID3D10EffectConstantBuffer * ID3D10EffectStringVariable_AsConstantBuffer(ID3D10EffectStringVariable* This) {
+    return This->lpVtbl->AsConstantBuffer(This);
+}
+static __WIDL_INLINE ID3D10EffectShaderVariable * ID3D10EffectStringVariable_AsShader(ID3D10EffectStringVariable* This) {
+    return This->lpVtbl->AsShader(This);
+}
+static __WIDL_INLINE ID3D10EffectBlendVariable * ID3D10EffectStringVariable_AsBlend(ID3D10EffectStringVariable* This) {
+    return This->lpVtbl->AsBlend(This);
+}
+static __WIDL_INLINE ID3D10EffectDepthStencilVariable * ID3D10EffectStringVariable_AsDepthStencil(ID3D10EffectStringVariable* This) {
+    return This->lpVtbl->AsDepthStencil(This);
+}
+static __WIDL_INLINE ID3D10EffectRasterizerVariable * ID3D10EffectStringVariable_AsRasterizer(ID3D10EffectStringVariable* This) {
+    return This->lpVtbl->AsRasterizer(This);
+}
+static __WIDL_INLINE ID3D10EffectSamplerVariable * ID3D10EffectStringVariable_AsSampler(ID3D10EffectStringVariable* This) {
+    return This->lpVtbl->AsSampler(This);
+}
+static __WIDL_INLINE HRESULT ID3D10EffectStringVariable_SetRawValue(ID3D10EffectStringVariable* This,void *data,UINT offset,UINT count) {
+    return This->lpVtbl->SetRawValue(This,data,offset,count);
+}
+static __WIDL_INLINE HRESULT ID3D10EffectStringVariable_GetRawValue(ID3D10EffectStringVariable* This,void *data,UINT offset,UINT count) {
+    return This->lpVtbl->GetRawValue(This,data,offset,count);
+}
+/*** ID3D10EffectStringVariable methods ***/
+static __WIDL_INLINE HRESULT ID3D10EffectStringVariable_GetString(ID3D10EffectStringVariable* This,const char **str) {
+    return This->lpVtbl->GetString(This,str);
+}
+static __WIDL_INLINE HRESULT ID3D10EffectStringVariable_GetStringArray(ID3D10EffectStringVariable* This,const char **strs,UINT offset,UINT count) {
+    return This->lpVtbl->GetStringArray(This,strs,offset,count);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __ID3D10EffectStringVariable_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * ID3D10EffectShaderResourceVariable interface
+ */
+#ifndef __ID3D10EffectShaderResourceVariable_INTERFACE_DEFINED__
+#define __ID3D10EffectShaderResourceVariable_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_ID3D10EffectShaderResourceVariable, 0xc0a7157b, 0xd872, 0x4b1d, 0x80,0x73, 0xef,0xc2,0xac,0xd4,0xb1,0xfc);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("c0a7157b-d872-4b1d-8073-efc2acd4b1fc")
+ID3D10EffectShaderResourceVariable : public ID3D10EffectVariable
+{
+    virtual HRESULT STDMETHODCALLTYPE SetResource(
+        ID3D10ShaderResourceView *resource) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetResource(
+        ID3D10ShaderResourceView **resource) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetResourceArray(
+        ID3D10ShaderResourceView **resources,
+        UINT offset,
+        UINT count) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetResourceArray(
+        ID3D10ShaderResourceView **resources,
+        UINT offset,
+        UINT count) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(ID3D10EffectShaderResourceVariable, 0xc0a7157b, 0xd872, 0x4b1d, 0x80,0x73, 0xef,0xc2,0xac,0xd4,0xb1,0xfc)
+#endif
+#else
+typedef struct ID3D10EffectShaderResourceVariableVtbl {
+    BEGIN_INTERFACE
+
+    /*** ID3D10EffectVariable methods ***/
+    WINBOOL (STDMETHODCALLTYPE *IsValid)(
+        ID3D10EffectShaderResourceVariable *This);
+
+    ID3D10EffectType * (STDMETHODCALLTYPE *GetType)(
+        ID3D10EffectShaderResourceVariable *This);
+
+    HRESULT (STDMETHODCALLTYPE *GetDesc)(
+        ID3D10EffectShaderResourceVariable *This,
+        D3D10_EFFECT_VARIABLE_DESC *desc);
+
+    ID3D10EffectVariable * (STDMETHODCALLTYPE *GetAnnotationByIndex)(
+        ID3D10EffectShaderResourceVariable *This,
+        UINT index);
+
+    ID3D10EffectVariable * (STDMETHODCALLTYPE *GetAnnotationByName)(
+        ID3D10EffectShaderResourceVariable *This,
+        const char *name);
+
+    ID3D10EffectVariable * (STDMETHODCALLTYPE *GetMemberByIndex)(
+        ID3D10EffectShaderResourceVariable *This,
+        UINT index);
+
+    ID3D10EffectVariable * (STDMETHODCALLTYPE *GetMemberByName)(
+        ID3D10EffectShaderResourceVariable *This,
+        const char *name);
+
+    ID3D10EffectVariable * (STDMETHODCALLTYPE *GetMemberBySemantic)(
+        ID3D10EffectShaderResourceVariable *This,
+        const char *semantic);
+
+    ID3D10EffectVariable * (STDMETHODCALLTYPE *GetElement)(
+        ID3D10EffectShaderResourceVariable *This,
+        UINT index);
+
+    ID3D10EffectConstantBuffer * (STDMETHODCALLTYPE *GetParentConstantBuffer)(
+        ID3D10EffectShaderResourceVariable *This);
+
+    ID3D10EffectScalarVariable * (STDMETHODCALLTYPE *AsScalar)(
+        ID3D10EffectShaderResourceVariable *This);
+
+    ID3D10EffectVectorVariable * (STDMETHODCALLTYPE *AsVector)(
+        ID3D10EffectShaderResourceVariable *This);
+
+    ID3D10EffectMatrixVariable * (STDMETHODCALLTYPE *AsMatrix)(
+        ID3D10EffectShaderResourceVariable *This);
+
+    ID3D10EffectStringVariable * (STDMETHODCALLTYPE *AsString)(
+        ID3D10EffectShaderResourceVariable *This);
+
+    ID3D10EffectShaderResourceVariable * (STDMETHODCALLTYPE *AsShaderResource)(
+        ID3D10EffectShaderResourceVariable *This);
+
+    ID3D10EffectRenderTargetViewVariable * (STDMETHODCALLTYPE *AsRenderTargetView)(
+        ID3D10EffectShaderResourceVariable *This);
+
+    ID3D10EffectDepthStencilViewVariable * (STDMETHODCALLTYPE *AsDepthStencilView)(
+        ID3D10EffectShaderResourceVariable *This);
+
+    ID3D10EffectConstantBuffer * (STDMETHODCALLTYPE *AsConstantBuffer)(
+        ID3D10EffectShaderResourceVariable *This);
+
+    ID3D10EffectShaderVariable * (STDMETHODCALLTYPE *AsShader)(
+        ID3D10EffectShaderResourceVariable *This);
+
+    ID3D10EffectBlendVariable * (STDMETHODCALLTYPE *AsBlend)(
+        ID3D10EffectShaderResourceVariable *This);
+
+    ID3D10EffectDepthStencilVariable * (STDMETHODCALLTYPE *AsDepthStencil)(
+        ID3D10EffectShaderResourceVariable *This);
+
+    ID3D10EffectRasterizerVariable * (STDMETHODCALLTYPE *AsRasterizer)(
+        ID3D10EffectShaderResourceVariable *This);
+
+    ID3D10EffectSamplerVariable * (STDMETHODCALLTYPE *AsSampler)(
+        ID3D10EffectShaderResourceVariable *This);
+
+    HRESULT (STDMETHODCALLTYPE *SetRawValue)(
+        ID3D10EffectShaderResourceVariable *This,
+        void *data,
+        UINT offset,
+        UINT count);
+
+    HRESULT (STDMETHODCALLTYPE *GetRawValue)(
+        ID3D10EffectShaderResourceVariable *This,
+        void *data,
+        UINT offset,
+        UINT count);
+
+    /*** ID3D10EffectShaderResourceVariable methods ***/
+    HRESULT (STDMETHODCALLTYPE *SetResource)(
+        ID3D10EffectShaderResourceVariable *This,
+        ID3D10ShaderResourceView *resource);
+
+    HRESULT (STDMETHODCALLTYPE *GetResource)(
+        ID3D10EffectShaderResourceVariable *This,
+        ID3D10ShaderResourceView **resource);
+
+    HRESULT (STDMETHODCALLTYPE *SetResourceArray)(
+        ID3D10EffectShaderResourceVariable *This,
+        ID3D10ShaderResourceView **resources,
+        UINT offset,
+        UINT count);
+
+    HRESULT (STDMETHODCALLTYPE *GetResourceArray)(
+        ID3D10EffectShaderResourceVariable *This,
+        ID3D10ShaderResourceView **resources,
+        UINT offset,
+        UINT count);
+
+    END_INTERFACE
+} ID3D10EffectShaderResourceVariableVtbl;
+
+interface ID3D10EffectShaderResourceVariable {
+    CONST_VTBL ID3D10EffectShaderResourceVariableVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** ID3D10EffectVariable methods ***/
+#define ID3D10EffectShaderResourceVariable_IsValid(This) (This)->lpVtbl->IsValid(This)
+#define ID3D10EffectShaderResourceVariable_GetType(This) (This)->lpVtbl->GetType(This)
+#define ID3D10EffectShaderResourceVariable_GetDesc(This,desc) (This)->lpVtbl->GetDesc(This,desc)
+#define ID3D10EffectShaderResourceVariable_GetAnnotationByIndex(This,index) (This)->lpVtbl->GetAnnotationByIndex(This,index)
+#define ID3D10EffectShaderResourceVariable_GetAnnotationByName(This,name) (This)->lpVtbl->GetAnnotationByName(This,name)
+#define ID3D10EffectShaderResourceVariable_GetMemberByIndex(This,index) (This)->lpVtbl->GetMemberByIndex(This,index)
+#define ID3D10EffectShaderResourceVariable_GetMemberByName(This,name) (This)->lpVtbl->GetMemberByName(This,name)
+#define ID3D10EffectShaderResourceVariable_GetMemberBySemantic(This,semantic) (This)->lpVtbl->GetMemberBySemantic(This,semantic)
+#define ID3D10EffectShaderResourceVariable_GetElement(This,index) (This)->lpVtbl->GetElement(This,index)
+#define ID3D10EffectShaderResourceVariable_GetParentConstantBuffer(This) (This)->lpVtbl->GetParentConstantBuffer(This)
+#define ID3D10EffectShaderResourceVariable_AsScalar(This) (This)->lpVtbl->AsScalar(This)
+#define ID3D10EffectShaderResourceVariable_AsVector(This) (This)->lpVtbl->AsVector(This)
+#define ID3D10EffectShaderResourceVariable_AsMatrix(This) (This)->lpVtbl->AsMatrix(This)
+#define ID3D10EffectShaderResourceVariable_AsString(This) (This)->lpVtbl->AsString(This)
+#define ID3D10EffectShaderResourceVariable_AsShaderResource(This) (This)->lpVtbl->AsShaderResource(This)
+#define ID3D10EffectShaderResourceVariable_AsRenderTargetView(This) (This)->lpVtbl->AsRenderTargetView(This)
+#define ID3D10EffectShaderResourceVariable_AsDepthStencilView(This) (This)->lpVtbl->AsDepthStencilView(This)
+#define ID3D10EffectShaderResourceVariable_AsConstantBuffer(This) (This)->lpVtbl->AsConstantBuffer(This)
+#define ID3D10EffectShaderResourceVariable_AsShader(This) (This)->lpVtbl->AsShader(This)
+#define ID3D10EffectShaderResourceVariable_AsBlend(This) (This)->lpVtbl->AsBlend(This)
+#define ID3D10EffectShaderResourceVariable_AsDepthStencil(This) (This)->lpVtbl->AsDepthStencil(This)
+#define ID3D10EffectShaderResourceVariable_AsRasterizer(This) (This)->lpVtbl->AsRasterizer(This)
+#define ID3D10EffectShaderResourceVariable_AsSampler(This) (This)->lpVtbl->AsSampler(This)
+#define ID3D10EffectShaderResourceVariable_SetRawValue(This,data,offset,count) (This)->lpVtbl->SetRawValue(This,data,offset,count)
+#define ID3D10EffectShaderResourceVariable_GetRawValue(This,data,offset,count) (This)->lpVtbl->GetRawValue(This,data,offset,count)
+/*** ID3D10EffectShaderResourceVariable methods ***/
+#define ID3D10EffectShaderResourceVariable_SetResource(This,resource) (This)->lpVtbl->SetResource(This,resource)
+#define ID3D10EffectShaderResourceVariable_GetResource(This,resource) (This)->lpVtbl->GetResource(This,resource)
+#define ID3D10EffectShaderResourceVariable_SetResourceArray(This,resources,offset,count) (This)->lpVtbl->SetResourceArray(This,resources,offset,count)
+#define ID3D10EffectShaderResourceVariable_GetResourceArray(This,resources,offset,count) (This)->lpVtbl->GetResourceArray(This,resources,offset,count)
+#else
+/*** ID3D10EffectVariable methods ***/
+static __WIDL_INLINE WINBOOL ID3D10EffectShaderResourceVariable_IsValid(ID3D10EffectShaderResourceVariable* This) {
+    return This->lpVtbl->IsValid(This);
+}
+static __WIDL_INLINE ID3D10EffectType * ID3D10EffectShaderResourceVariable_GetType(ID3D10EffectShaderResourceVariable* This) {
+    return This->lpVtbl->GetType(This);
+}
+static __WIDL_INLINE HRESULT ID3D10EffectShaderResourceVariable_GetDesc(ID3D10EffectShaderResourceVariable* This,D3D10_EFFECT_VARIABLE_DESC *desc) {
+    return This->lpVtbl->GetDesc(This,desc);
+}
+static __WIDL_INLINE ID3D10EffectVariable * ID3D10EffectShaderResourceVariable_GetAnnotationByIndex(ID3D10EffectShaderResourceVariable* This,UINT index) {
+    return This->lpVtbl->GetAnnotationByIndex(This,index);
+}
+static __WIDL_INLINE ID3D10EffectVariable * ID3D10EffectShaderResourceVariable_GetAnnotationByName(ID3D10EffectShaderResourceVariable* This,const char *name) {
+    return This->lpVtbl->GetAnnotationByName(This,name);
+}
+static __WIDL_INLINE ID3D10EffectVariable * ID3D10EffectShaderResourceVariable_GetMemberByIndex(ID3D10EffectShaderResourceVariable* This,UINT index) {
+    return This->lpVtbl->GetMemberByIndex(This,index);
+}
+static __WIDL_INLINE ID3D10EffectVariable * ID3D10EffectShaderResourceVariable_GetMemberByName(ID3D10EffectShaderResourceVariable* This,const char *name) {
+    return This->lpVtbl->GetMemberByName(This,name);
+}
+static __WIDL_INLINE ID3D10EffectVariable * ID3D10EffectShaderResourceVariable_GetMemberBySemantic(ID3D10EffectShaderResourceVariable* This,const char *semantic) {
+    return This->lpVtbl->GetMemberBySemantic(This,semantic);
+}
+static __WIDL_INLINE ID3D10EffectVariable * ID3D10EffectShaderResourceVariable_GetElement(ID3D10EffectShaderResourceVariable* This,UINT index) {
+    return This->lpVtbl->GetElement(This,index);
+}
+static __WIDL_INLINE ID3D10EffectConstantBuffer * ID3D10EffectShaderResourceVariable_GetParentConstantBuffer(ID3D10EffectShaderResourceVariable* This) {
+    return This->lpVtbl->GetParentConstantBuffer(This);
+}
+static __WIDL_INLINE ID3D10EffectScalarVariable * ID3D10EffectShaderResourceVariable_AsScalar(ID3D10EffectShaderResourceVariable* This) {
+    return This->lpVtbl->AsScalar(This);
+}
+static __WIDL_INLINE ID3D10EffectVectorVariable * ID3D10EffectShaderResourceVariable_AsVector(ID3D10EffectShaderResourceVariable* This) {
+    return This->lpVtbl->AsVector(This);
+}
+static __WIDL_INLINE ID3D10EffectMatrixVariable * ID3D10EffectShaderResourceVariable_AsMatrix(ID3D10EffectShaderResourceVariable* This) {
+    return This->lpVtbl->AsMatrix(This);
+}
+static __WIDL_INLINE ID3D10EffectStringVariable * ID3D10EffectShaderResourceVariable_AsString(ID3D10EffectShaderResourceVariable* This) {
+    return This->lpVtbl->AsString(This);
+}
+static __WIDL_INLINE ID3D10EffectShaderResourceVariable * ID3D10EffectShaderResourceVariable_AsShaderResource(ID3D10EffectShaderResourceVariable* This) {
+    return This->lpVtbl->AsShaderResource(This);
+}
+static __WIDL_INLINE ID3D10EffectRenderTargetViewVariable * ID3D10EffectShaderResourceVariable_AsRenderTargetView(ID3D10EffectShaderResourceVariable* This) {
+    return This->lpVtbl->AsRenderTargetView(This);
+}
+static __WIDL_INLINE ID3D10EffectDepthStencilViewVariable * ID3D10EffectShaderResourceVariable_AsDepthStencilView(ID3D10EffectShaderResourceVariable* This) {
+    return This->lpVtbl->AsDepthStencilView(This);
+}
+static __WIDL_INLINE ID3D10EffectConstantBuffer * ID3D10EffectShaderResourceVariable_AsConstantBuffer(ID3D10EffectShaderResourceVariable* This) {
+    return This->lpVtbl->AsConstantBuffer(This);
+}
+static __WIDL_INLINE ID3D10EffectShaderVariable * ID3D10EffectShaderResourceVariable_AsShader(ID3D10EffectShaderResourceVariable* This) {
+    return This->lpVtbl->AsShader(This);
+}
+static __WIDL_INLINE ID3D10EffectBlendVariable * ID3D10EffectShaderResourceVariable_AsBlend(ID3D10EffectShaderResourceVariable* This) {
+    return This->lpVtbl->AsBlend(This);
+}
+static __WIDL_INLINE ID3D10EffectDepthStencilVariable * ID3D10EffectShaderResourceVariable_AsDepthStencil(ID3D10EffectShaderResourceVariable* This) {
+    return This->lpVtbl->AsDepthStencil(This);
+}
+static __WIDL_INLINE ID3D10EffectRasterizerVariable * ID3D10EffectShaderResourceVariable_AsRasterizer(ID3D10EffectShaderResourceVariable* This) {
+    return This->lpVtbl->AsRasterizer(This);
+}
+static __WIDL_INLINE ID3D10EffectSamplerVariable * ID3D10EffectShaderResourceVariable_AsSampler(ID3D10EffectShaderResourceVariable* This) {
+    return This->lpVtbl->AsSampler(This);
+}
+static __WIDL_INLINE HRESULT ID3D10EffectShaderResourceVariable_SetRawValue(ID3D10EffectShaderResourceVariable* This,void *data,UINT offset,UINT count) {
+    return This->lpVtbl->SetRawValue(This,data,offset,count);
+}
+static __WIDL_INLINE HRESULT ID3D10EffectShaderResourceVariable_GetRawValue(ID3D10EffectShaderResourceVariable* This,void *data,UINT offset,UINT count) {
+    return This->lpVtbl->GetRawValue(This,data,offset,count);
+}
+/*** ID3D10EffectShaderResourceVariable methods ***/
+static __WIDL_INLINE HRESULT ID3D10EffectShaderResourceVariable_SetResource(ID3D10EffectShaderResourceVariable* This,ID3D10ShaderResourceView *resource) {
+    return This->lpVtbl->SetResource(This,resource);
+}
+static __WIDL_INLINE HRESULT ID3D10EffectShaderResourceVariable_GetResource(ID3D10EffectShaderResourceVariable* This,ID3D10ShaderResourceView **resource) {
+    return This->lpVtbl->GetResource(This,resource);
+}
+static __WIDL_INLINE HRESULT ID3D10EffectShaderResourceVariable_SetResourceArray(ID3D10EffectShaderResourceVariable* This,ID3D10ShaderResourceView **resources,UINT offset,UINT count) {
+    return This->lpVtbl->SetResourceArray(This,resources,offset,count);
+}
+static __WIDL_INLINE HRESULT ID3D10EffectShaderResourceVariable_GetResourceArray(ID3D10EffectShaderResourceVariable* This,ID3D10ShaderResourceView **resources,UINT offset,UINT count) {
+    return This->lpVtbl->GetResourceArray(This,resources,offset,count);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __ID3D10EffectShaderResourceVariable_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * ID3D10EffectRenderTargetViewVariable interface
+ */
+#ifndef __ID3D10EffectRenderTargetViewVariable_INTERFACE_DEFINED__
+#define __ID3D10EffectRenderTargetViewVariable_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_ID3D10EffectRenderTargetViewVariable, 0x28ca0cc3, 0xc2c9, 0x40bb, 0xb5,0x7f, 0x67,0xb7,0x37,0x12,0x2b,0x17);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("28ca0cc3-c2c9-40bb-b57f-67b737122b17")
+ID3D10EffectRenderTargetViewVariable : public ID3D10EffectVariable
+{
+    virtual HRESULT STDMETHODCALLTYPE SetRenderTarget(
+        ID3D10RenderTargetView *view) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetRenderTarget(
+        ID3D10RenderTargetView **view) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetRenderTargetArray(
+        ID3D10RenderTargetView **views,
+        UINT offset,
+        UINT count) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetRenderTargetArray(
+        ID3D10RenderTargetView **views,
+        UINT offset,
+        UINT count) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(ID3D10EffectRenderTargetViewVariable, 0x28ca0cc3, 0xc2c9, 0x40bb, 0xb5,0x7f, 0x67,0xb7,0x37,0x12,0x2b,0x17)
+#endif
+#else
+typedef struct ID3D10EffectRenderTargetViewVariableVtbl {
+    BEGIN_INTERFACE
+
+    /*** ID3D10EffectVariable methods ***/
+    WINBOOL (STDMETHODCALLTYPE *IsValid)(
+        ID3D10EffectRenderTargetViewVariable *This);
+
+    ID3D10EffectType * (STDMETHODCALLTYPE *GetType)(
+        ID3D10EffectRenderTargetViewVariable *This);
+
+    HRESULT (STDMETHODCALLTYPE *GetDesc)(
+        ID3D10EffectRenderTargetViewVariable *This,
+        D3D10_EFFECT_VARIABLE_DESC *desc);
+
+    ID3D10EffectVariable * (STDMETHODCALLTYPE *GetAnnotationByIndex)(
+        ID3D10EffectRenderTargetViewVariable *This,
+        UINT index);
+
+    ID3D10EffectVariable * (STDMETHODCALLTYPE *GetAnnotationByName)(
+        ID3D10EffectRenderTargetViewVariable *This,
+        const char *name);
+
+    ID3D10EffectVariable * (STDMETHODCALLTYPE *GetMemberByIndex)(
+        ID3D10EffectRenderTargetViewVariable *This,
+        UINT index);
+
+    ID3D10EffectVariable * (STDMETHODCALLTYPE *GetMemberByName)(
+        ID3D10EffectRenderTargetViewVariable *This,
+        const char *name);
+
+    ID3D10EffectVariable * (STDMETHODCALLTYPE *GetMemberBySemantic)(
+        ID3D10EffectRenderTargetViewVariable *This,
+        const char *semantic);
+
+    ID3D10EffectVariable * (STDMETHODCALLTYPE *GetElement)(
+        ID3D10EffectRenderTargetViewVariable *This,
+        UINT index);
+
+    ID3D10EffectConstantBuffer * (STDMETHODCALLTYPE *GetParentConstantBuffer)(
+        ID3D10EffectRenderTargetViewVariable *This);
+
+    ID3D10EffectScalarVariable * (STDMETHODCALLTYPE *AsScalar)(
+        ID3D10EffectRenderTargetViewVariable *This);
+
+    ID3D10EffectVectorVariable * (STDMETHODCALLTYPE *AsVector)(
+        ID3D10EffectRenderTargetViewVariable *This);
+
+    ID3D10EffectMatrixVariable * (STDMETHODCALLTYPE *AsMatrix)(
+        ID3D10EffectRenderTargetViewVariable *This);
+
+    ID3D10EffectStringVariable * (STDMETHODCALLTYPE *AsString)(
+        ID3D10EffectRenderTargetViewVariable *This);
+
+    ID3D10EffectShaderResourceVariable * (STDMETHODCALLTYPE *AsShaderResource)(
+        ID3D10EffectRenderTargetViewVariable *This);
+
+    ID3D10EffectRenderTargetViewVariable * (STDMETHODCALLTYPE *AsRenderTargetView)(
+        ID3D10EffectRenderTargetViewVariable *This);
+
+    ID3D10EffectDepthStencilViewVariable * (STDMETHODCALLTYPE *AsDepthStencilView)(
+        ID3D10EffectRenderTargetViewVariable *This);
+
+    ID3D10EffectConstantBuffer * (STDMETHODCALLTYPE *AsConstantBuffer)(
+        ID3D10EffectRenderTargetViewVariable *This);
+
+    ID3D10EffectShaderVariable * (STDMETHODCALLTYPE *AsShader)(
+        ID3D10EffectRenderTargetViewVariable *This);
+
+    ID3D10EffectBlendVariable * (STDMETHODCALLTYPE *AsBlend)(
+        ID3D10EffectRenderTargetViewVariable *This);
+
+    ID3D10EffectDepthStencilVariable * (STDMETHODCALLTYPE *AsDepthStencil)(
+        ID3D10EffectRenderTargetViewVariable *This);
+
+    ID3D10EffectRasterizerVariable * (STDMETHODCALLTYPE *AsRasterizer)(
+        ID3D10EffectRenderTargetViewVariable *This);
+
+    ID3D10EffectSamplerVariable * (STDMETHODCALLTYPE *AsSampler)(
+        ID3D10EffectRenderTargetViewVariable *This);
+
+    HRESULT (STDMETHODCALLTYPE *SetRawValue)(
+        ID3D10EffectRenderTargetViewVariable *This,
+        void *data,
+        UINT offset,
+        UINT count);
+
+    HRESULT (STDMETHODCALLTYPE *GetRawValue)(
+        ID3D10EffectRenderTargetViewVariable *This,
+        void *data,
+        UINT offset,
+        UINT count);
+
+    /*** ID3D10EffectRenderTargetViewVariable methods ***/
+    HRESULT (STDMETHODCALLTYPE *SetRenderTarget)(
+        ID3D10EffectRenderTargetViewVariable *This,
+        ID3D10RenderTargetView *view);
+
+    HRESULT (STDMETHODCALLTYPE *GetRenderTarget)(
+        ID3D10EffectRenderTargetViewVariable *This,
+        ID3D10RenderTargetView **view);
+
+    HRESULT (STDMETHODCALLTYPE *SetRenderTargetArray)(
+        ID3D10EffectRenderTargetViewVariable *This,
+        ID3D10RenderTargetView **views,
+        UINT offset,
+        UINT count);
+
+    HRESULT (STDMETHODCALLTYPE *GetRenderTargetArray)(
+        ID3D10EffectRenderTargetViewVariable *This,
+        ID3D10RenderTargetView **views,
+        UINT offset,
+        UINT count);
+
+    END_INTERFACE
+} ID3D10EffectRenderTargetViewVariableVtbl;
+
+interface ID3D10EffectRenderTargetViewVariable {
+    CONST_VTBL ID3D10EffectRenderTargetViewVariableVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** ID3D10EffectVariable methods ***/
+#define ID3D10EffectRenderTargetViewVariable_IsValid(This) (This)->lpVtbl->IsValid(This)
+#define ID3D10EffectRenderTargetViewVariable_GetType(This) (This)->lpVtbl->GetType(This)
+#define ID3D10EffectRenderTargetViewVariable_GetDesc(This,desc) (This)->lpVtbl->GetDesc(This,desc)
+#define ID3D10EffectRenderTargetViewVariable_GetAnnotationByIndex(This,index) (This)->lpVtbl->GetAnnotationByIndex(This,index)
+#define ID3D10EffectRenderTargetViewVariable_GetAnnotationByName(This,name) (This)->lpVtbl->GetAnnotationByName(This,name)
+#define ID3D10EffectRenderTargetViewVariable_GetMemberByIndex(This,index) (This)->lpVtbl->GetMemberByIndex(This,index)
+#define ID3D10EffectRenderTargetViewVariable_GetMemberByName(This,name) (This)->lpVtbl->GetMemberByName(This,name)
+#define ID3D10EffectRenderTargetViewVariable_GetMemberBySemantic(This,semantic) (This)->lpVtbl->GetMemberBySemantic(This,semantic)
+#define ID3D10EffectRenderTargetViewVariable_GetElement(This,index) (This)->lpVtbl->GetElement(This,index)
+#define ID3D10EffectRenderTargetViewVariable_GetParentConstantBuffer(This) (This)->lpVtbl->GetParentConstantBuffer(This)
+#define ID3D10EffectRenderTargetViewVariable_AsScalar(This) (This)->lpVtbl->AsScalar(This)
+#define ID3D10EffectRenderTargetViewVariable_AsVector(This) (This)->lpVtbl->AsVector(This)
+#define ID3D10EffectRenderTargetViewVariable_AsMatrix(This) (This)->lpVtbl->AsMatrix(This)
+#define ID3D10EffectRenderTargetViewVariable_AsString(This) (This)->lpVtbl->AsString(This)
+#define ID3D10EffectRenderTargetViewVariable_AsShaderResource(This) (This)->lpVtbl->AsShaderResource(This)
+#define ID3D10EffectRenderTargetViewVariable_AsRenderTargetView(This) (This)->lpVtbl->AsRenderTargetView(This)
+#define ID3D10EffectRenderTargetViewVariable_AsDepthStencilView(This) (This)->lpVtbl->AsDepthStencilView(This)
+#define ID3D10EffectRenderTargetViewVariable_AsConstantBuffer(This) (This)->lpVtbl->AsConstantBuffer(This)
+#define ID3D10EffectRenderTargetViewVariable_AsShader(This) (This)->lpVtbl->AsShader(This)
+#define ID3D10EffectRenderTargetViewVariable_AsBlend(This) (This)->lpVtbl->AsBlend(This)
+#define ID3D10EffectRenderTargetViewVariable_AsDepthStencil(This) (This)->lpVtbl->AsDepthStencil(This)
+#define ID3D10EffectRenderTargetViewVariable_AsRasterizer(This) (This)->lpVtbl->AsRasterizer(This)
+#define ID3D10EffectRenderTargetViewVariable_AsSampler(This) (This)->lpVtbl->AsSampler(This)
+#define ID3D10EffectRenderTargetViewVariable_SetRawValue(This,data,offset,count) (This)->lpVtbl->SetRawValue(This,data,offset,count)
+#define ID3D10EffectRenderTargetViewVariable_GetRawValue(This,data,offset,count) (This)->lpVtbl->GetRawValue(This,data,offset,count)
+/*** ID3D10EffectRenderTargetViewVariable methods ***/
+#define ID3D10EffectRenderTargetViewVariable_SetRenderTarget(This,view) (This)->lpVtbl->SetRenderTarget(This,view)
+#define ID3D10EffectRenderTargetViewVariable_GetRenderTarget(This,view) (This)->lpVtbl->GetRenderTarget(This,view)
+#define ID3D10EffectRenderTargetViewVariable_SetRenderTargetArray(This,views,offset,count) (This)->lpVtbl->SetRenderTargetArray(This,views,offset,count)
+#define ID3D10EffectRenderTargetViewVariable_GetRenderTargetArray(This,views,offset,count) (This)->lpVtbl->GetRenderTargetArray(This,views,offset,count)
+#else
+/*** ID3D10EffectVariable methods ***/
+static __WIDL_INLINE WINBOOL ID3D10EffectRenderTargetViewVariable_IsValid(ID3D10EffectRenderTargetViewVariable* This) {
+    return This->lpVtbl->IsValid(This);
+}
+static __WIDL_INLINE ID3D10EffectType * ID3D10EffectRenderTargetViewVariable_GetType(ID3D10EffectRenderTargetViewVariable* This) {
+    return This->lpVtbl->GetType(This);
+}
+static __WIDL_INLINE HRESULT ID3D10EffectRenderTargetViewVariable_GetDesc(ID3D10EffectRenderTargetViewVariable* This,D3D10_EFFECT_VARIABLE_DESC *desc) {
+    return This->lpVtbl->GetDesc(This,desc);
+}
+static __WIDL_INLINE ID3D10EffectVariable * ID3D10EffectRenderTargetViewVariable_GetAnnotationByIndex(ID3D10EffectRenderTargetViewVariable* This,UINT index) {
+    return This->lpVtbl->GetAnnotationByIndex(This,index);
+}
+static __WIDL_INLINE ID3D10EffectVariable * ID3D10EffectRenderTargetViewVariable_GetAnnotationByName(ID3D10EffectRenderTargetViewVariable* This,const char *name) {
+    return This->lpVtbl->GetAnnotationByName(This,name);
+}
+static __WIDL_INLINE ID3D10EffectVariable * ID3D10EffectRenderTargetViewVariable_GetMemberByIndex(ID3D10EffectRenderTargetViewVariable* This,UINT index) {
+    return This->lpVtbl->GetMemberByIndex(This,index);
+}
+static __WIDL_INLINE ID3D10EffectVariable * ID3D10EffectRenderTargetViewVariable_GetMemberByName(ID3D10EffectRenderTargetViewVariable* This,const char *name) {
+    return This->lpVtbl->GetMemberByName(This,name);
+}
+static __WIDL_INLINE ID3D10EffectVariable * ID3D10EffectRenderTargetViewVariable_GetMemberBySemantic(ID3D10EffectRenderTargetViewVariable* This,const char *semantic) {
+    return This->lpVtbl->GetMemberBySemantic(This,semantic);
+}
+static __WIDL_INLINE ID3D10EffectVariable * ID3D10EffectRenderTargetViewVariable_GetElement(ID3D10EffectRenderTargetViewVariable* This,UINT index) {
+    return This->lpVtbl->GetElement(This,index);
+}
+static __WIDL_INLINE ID3D10EffectConstantBuffer * ID3D10EffectRenderTargetViewVariable_GetParentConstantBuffer(ID3D10EffectRenderTargetViewVariable* This) {
+    return This->lpVtbl->GetParentConstantBuffer(This);
+}
+static __WIDL_INLINE ID3D10EffectScalarVariable * ID3D10EffectRenderTargetViewVariable_AsScalar(ID3D10EffectRenderTargetViewVariable* This) {
+    return This->lpVtbl->AsScalar(This);
+}
+static __WIDL_INLINE ID3D10EffectVectorVariable * ID3D10EffectRenderTargetViewVariable_AsVector(ID3D10EffectRenderTargetViewVariable* This) {
+    return This->lpVtbl->AsVector(This);
+}
+static __WIDL_INLINE ID3D10EffectMatrixVariable * ID3D10EffectRenderTargetViewVariable_AsMatrix(ID3D10EffectRenderTargetViewVariable* This) {
+    return This->lpVtbl->AsMatrix(This);
+}
+static __WIDL_INLINE ID3D10EffectStringVariable * ID3D10EffectRenderTargetViewVariable_AsString(ID3D10EffectRenderTargetViewVariable* This) {
+    return This->lpVtbl->AsString(This);
+}
+static __WIDL_INLINE ID3D10EffectShaderResourceVariable * ID3D10EffectRenderTargetViewVariable_AsShaderResource(ID3D10EffectRenderTargetViewVariable* This) {
+    return This->lpVtbl->AsShaderResource(This);
+}
+static __WIDL_INLINE ID3D10EffectRenderTargetViewVariable * ID3D10EffectRenderTargetViewVariable_AsRenderTargetView(ID3D10EffectRenderTargetViewVariable* This) {
+    return This->lpVtbl->AsRenderTargetView(This);
+}
+static __WIDL_INLINE ID3D10EffectDepthStencilViewVariable * ID3D10EffectRenderTargetViewVariable_AsDepthStencilView(ID3D10EffectRenderTargetViewVariable* This) {
+    return This->lpVtbl->AsDepthStencilView(This);
+}
+static __WIDL_INLINE ID3D10EffectConstantBuffer * ID3D10EffectRenderTargetViewVariable_AsConstantBuffer(ID3D10EffectRenderTargetViewVariable* This) {
+    return This->lpVtbl->AsConstantBuffer(This);
+}
+static __WIDL_INLINE ID3D10EffectShaderVariable * ID3D10EffectRenderTargetViewVariable_AsShader(ID3D10EffectRenderTargetViewVariable* This) {
+    return This->lpVtbl->AsShader(This);
+}
+static __WIDL_INLINE ID3D10EffectBlendVariable * ID3D10EffectRenderTargetViewVariable_AsBlend(ID3D10EffectRenderTargetViewVariable* This) {
+    return This->lpVtbl->AsBlend(This);
+}
+static __WIDL_INLINE ID3D10EffectDepthStencilVariable * ID3D10EffectRenderTargetViewVariable_AsDepthStencil(ID3D10EffectRenderTargetViewVariable* This) {
+    return This->lpVtbl->AsDepthStencil(This);
+}
+static __WIDL_INLINE ID3D10EffectRasterizerVariable * ID3D10EffectRenderTargetViewVariable_AsRasterizer(ID3D10EffectRenderTargetViewVariable* This) {
+    return This->lpVtbl->AsRasterizer(This);
+}
+static __WIDL_INLINE ID3D10EffectSamplerVariable * ID3D10EffectRenderTargetViewVariable_AsSampler(ID3D10EffectRenderTargetViewVariable* This) {
+    return This->lpVtbl->AsSampler(This);
+}
+static __WIDL_INLINE HRESULT ID3D10EffectRenderTargetViewVariable_SetRawValue(ID3D10EffectRenderTargetViewVariable* This,void *data,UINT offset,UINT count) {
+    return This->lpVtbl->SetRawValue(This,data,offset,count);
+}
+static __WIDL_INLINE HRESULT ID3D10EffectRenderTargetViewVariable_GetRawValue(ID3D10EffectRenderTargetViewVariable* This,void *data,UINT offset,UINT count) {
+    return This->lpVtbl->GetRawValue(This,data,offset,count);
+}
+/*** ID3D10EffectRenderTargetViewVariable methods ***/
+static __WIDL_INLINE HRESULT ID3D10EffectRenderTargetViewVariable_SetRenderTarget(ID3D10EffectRenderTargetViewVariable* This,ID3D10RenderTargetView *view) {
+    return This->lpVtbl->SetRenderTarget(This,view);
+}
+static __WIDL_INLINE HRESULT ID3D10EffectRenderTargetViewVariable_GetRenderTarget(ID3D10EffectRenderTargetViewVariable* This,ID3D10RenderTargetView **view) {
+    return This->lpVtbl->GetRenderTarget(This,view);
+}
+static __WIDL_INLINE HRESULT ID3D10EffectRenderTargetViewVariable_SetRenderTargetArray(ID3D10EffectRenderTargetViewVariable* This,ID3D10RenderTargetView **views,UINT offset,UINT count) {
+    return This->lpVtbl->SetRenderTargetArray(This,views,offset,count);
+}
+static __WIDL_INLINE HRESULT ID3D10EffectRenderTargetViewVariable_GetRenderTargetArray(ID3D10EffectRenderTargetViewVariable* This,ID3D10RenderTargetView **views,UINT offset,UINT count) {
+    return This->lpVtbl->GetRenderTargetArray(This,views,offset,count);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __ID3D10EffectRenderTargetViewVariable_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * ID3D10EffectDepthStencilViewVariable interface
+ */
+#ifndef __ID3D10EffectDepthStencilViewVariable_INTERFACE_DEFINED__
+#define __ID3D10EffectDepthStencilViewVariable_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_ID3D10EffectDepthStencilViewVariable, 0x3e02c918, 0xcc79, 0x4985, 0xb6,0x22, 0x2d,0x92,0xad,0x70,0x16,0x23);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("3e02c918-cc79-4985-b622-2d92ad701623")
+ID3D10EffectDepthStencilViewVariable : public ID3D10EffectVariable
+{
+    virtual HRESULT STDMETHODCALLTYPE SetDepthStencil(
+        ID3D10DepthStencilView *view) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetDepthStencil(
+        ID3D10DepthStencilView **view) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetDepthStencilArray(
+        ID3D10DepthStencilView **views,
+        UINT offset,
+        UINT count) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetDepthStencilArray(
+        ID3D10DepthStencilView **views,
+        UINT offset,
+        UINT count) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(ID3D10EffectDepthStencilViewVariable, 0x3e02c918, 0xcc79, 0x4985, 0xb6,0x22, 0x2d,0x92,0xad,0x70,0x16,0x23)
+#endif
+#else
+typedef struct ID3D10EffectDepthStencilViewVariableVtbl {
+    BEGIN_INTERFACE
+
+    /*** ID3D10EffectVariable methods ***/
+    WINBOOL (STDMETHODCALLTYPE *IsValid)(
+        ID3D10EffectDepthStencilViewVariable *This);
+
+    ID3D10EffectType * (STDMETHODCALLTYPE *GetType)(
+        ID3D10EffectDepthStencilViewVariable *This);
+
+    HRESULT (STDMETHODCALLTYPE *GetDesc)(
+        ID3D10EffectDepthStencilViewVariable *This,
+        D3D10_EFFECT_VARIABLE_DESC *desc);
+
+    ID3D10EffectVariable * (STDMETHODCALLTYPE *GetAnnotationByIndex)(
+        ID3D10EffectDepthStencilViewVariable *This,
+        UINT index);
+
+    ID3D10EffectVariable * (STDMETHODCALLTYPE *GetAnnotationByName)(
+        ID3D10EffectDepthStencilViewVariable *This,
+        const char *name);
+
+    ID3D10EffectVariable * (STDMETHODCALLTYPE *GetMemberByIndex)(
+        ID3D10EffectDepthStencilViewVariable *This,
+        UINT index);
+
+    ID3D10EffectVariable * (STDMETHODCALLTYPE *GetMemberByName)(
+        ID3D10EffectDepthStencilViewVariable *This,
+        const char *name);
+
+    ID3D10EffectVariable * (STDMETHODCALLTYPE *GetMemberBySemantic)(
+        ID3D10EffectDepthStencilViewVariable *This,
+        const char *semantic);
+
+    ID3D10EffectVariable * (STDMETHODCALLTYPE *GetElement)(
+        ID3D10EffectDepthStencilViewVariable *This,
+        UINT index);
+
+    ID3D10EffectConstantBuffer * (STDMETHODCALLTYPE *GetParentConstantBuffer)(
+        ID3D10EffectDepthStencilViewVariable *This);
+
+    ID3D10EffectScalarVariable * (STDMETHODCALLTYPE *AsScalar)(
+        ID3D10EffectDepthStencilViewVariable *This);
+
+    ID3D10EffectVectorVariable * (STDMETHODCALLTYPE *AsVector)(
+        ID3D10EffectDepthStencilViewVariable *This);
+
+    ID3D10EffectMatrixVariable * (STDMETHODCALLTYPE *AsMatrix)(
+        ID3D10EffectDepthStencilViewVariable *This);
+
+    ID3D10EffectStringVariable * (STDMETHODCALLTYPE *AsString)(
+        ID3D10EffectDepthStencilViewVariable *This);
+
+    ID3D10EffectShaderResourceVariable * (STDMETHODCALLTYPE *AsShaderResource)(
+        ID3D10EffectDepthStencilViewVariable *This);
+
+    ID3D10EffectRenderTargetViewVariable * (STDMETHODCALLTYPE *AsRenderTargetView)(
+        ID3D10EffectDepthStencilViewVariable *This);
+
+    ID3D10EffectDepthStencilViewVariable * (STDMETHODCALLTYPE *AsDepthStencilView)(
+        ID3D10EffectDepthStencilViewVariable *This);
+
+    ID3D10EffectConstantBuffer * (STDMETHODCALLTYPE *AsConstantBuffer)(
+        ID3D10EffectDepthStencilViewVariable *This);
+
+    ID3D10EffectShaderVariable * (STDMETHODCALLTYPE *AsShader)(
+        ID3D10EffectDepthStencilViewVariable *This);
+
+    ID3D10EffectBlendVariable * (STDMETHODCALLTYPE *AsBlend)(
+        ID3D10EffectDepthStencilViewVariable *This);
+
+    ID3D10EffectDepthStencilVariable * (STDMETHODCALLTYPE *AsDepthStencil)(
+        ID3D10EffectDepthStencilViewVariable *This);
+
+    ID3D10EffectRasterizerVariable * (STDMETHODCALLTYPE *AsRasterizer)(
+        ID3D10EffectDepthStencilViewVariable *This);
+
+    ID3D10EffectSamplerVariable * (STDMETHODCALLTYPE *AsSampler)(
+        ID3D10EffectDepthStencilViewVariable *This);
+
+    HRESULT (STDMETHODCALLTYPE *SetRawValue)(
+        ID3D10EffectDepthStencilViewVariable *This,
+        void *data,
+        UINT offset,
+        UINT count);
+
+    HRESULT (STDMETHODCALLTYPE *GetRawValue)(
+        ID3D10EffectDepthStencilViewVariable *This,
+        void *data,
+        UINT offset,
+        UINT count);
+
+    /*** ID3D10EffectDepthStencilViewVariable methods ***/
+    HRESULT (STDMETHODCALLTYPE *SetDepthStencil)(
+        ID3D10EffectDepthStencilViewVariable *This,
+        ID3D10DepthStencilView *view);
+
+    HRESULT (STDMETHODCALLTYPE *GetDepthStencil)(
+        ID3D10EffectDepthStencilViewVariable *This,
+        ID3D10DepthStencilView **view);
+
+    HRESULT (STDMETHODCALLTYPE *SetDepthStencilArray)(
+        ID3D10EffectDepthStencilViewVariable *This,
+        ID3D10DepthStencilView **views,
+        UINT offset,
+        UINT count);
+
+    HRESULT (STDMETHODCALLTYPE *GetDepthStencilArray)(
+        ID3D10EffectDepthStencilViewVariable *This,
+        ID3D10DepthStencilView **views,
+        UINT offset,
+        UINT count);
+
+    END_INTERFACE
+} ID3D10EffectDepthStencilViewVariableVtbl;
+
+interface ID3D10EffectDepthStencilViewVariable {
+    CONST_VTBL ID3D10EffectDepthStencilViewVariableVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** ID3D10EffectVariable methods ***/
+#define ID3D10EffectDepthStencilViewVariable_IsValid(This) (This)->lpVtbl->IsValid(This)
+#define ID3D10EffectDepthStencilViewVariable_GetType(This) (This)->lpVtbl->GetType(This)
+#define ID3D10EffectDepthStencilViewVariable_GetDesc(This,desc) (This)->lpVtbl->GetDesc(This,desc)
+#define ID3D10EffectDepthStencilViewVariable_GetAnnotationByIndex(This,index) (This)->lpVtbl->GetAnnotationByIndex(This,index)
+#define ID3D10EffectDepthStencilViewVariable_GetAnnotationByName(This,name) (This)->lpVtbl->GetAnnotationByName(This,name)
+#define ID3D10EffectDepthStencilViewVariable_GetMemberByIndex(This,index) (This)->lpVtbl->GetMemberByIndex(This,index)
+#define ID3D10EffectDepthStencilViewVariable_GetMemberByName(This,name) (This)->lpVtbl->GetMemberByName(This,name)
+#define ID3D10EffectDepthStencilViewVariable_GetMemberBySemantic(This,semantic) (This)->lpVtbl->GetMemberBySemantic(This,semantic)
+#define ID3D10EffectDepthStencilViewVariable_GetElement(This,index) (This)->lpVtbl->GetElement(This,index)
+#define ID3D10EffectDepthStencilViewVariable_GetParentConstantBuffer(This) (This)->lpVtbl->GetParentConstantBuffer(This)
+#define ID3D10EffectDepthStencilViewVariable_AsScalar(This) (This)->lpVtbl->AsScalar(This)
+#define ID3D10EffectDepthStencilViewVariable_AsVector(This) (This)->lpVtbl->AsVector(This)
+#define ID3D10EffectDepthStencilViewVariable_AsMatrix(This) (This)->lpVtbl->AsMatrix(This)
+#define ID3D10EffectDepthStencilViewVariable_AsString(This) (This)->lpVtbl->AsString(This)
+#define ID3D10EffectDepthStencilViewVariable_AsShaderResource(This) (This)->lpVtbl->AsShaderResource(This)
+#define ID3D10EffectDepthStencilViewVariable_AsRenderTargetView(This) (This)->lpVtbl->AsRenderTargetView(This)
+#define ID3D10EffectDepthStencilViewVariable_AsDepthStencilView(This) (This)->lpVtbl->AsDepthStencilView(This)
+#define ID3D10EffectDepthStencilViewVariable_AsConstantBuffer(This) (This)->lpVtbl->AsConstantBuffer(This)
+#define ID3D10EffectDepthStencilViewVariable_AsShader(This) (This)->lpVtbl->AsShader(This)
+#define ID3D10EffectDepthStencilViewVariable_AsBlend(This) (This)->lpVtbl->AsBlend(This)
+#define ID3D10EffectDepthStencilViewVariable_AsDepthStencil(This) (This)->lpVtbl->AsDepthStencil(This)
+#define ID3D10EffectDepthStencilViewVariable_AsRasterizer(This) (This)->lpVtbl->AsRasterizer(This)
+#define ID3D10EffectDepthStencilViewVariable_AsSampler(This) (This)->lpVtbl->AsSampler(This)
+#define ID3D10EffectDepthStencilViewVariable_SetRawValue(This,data,offset,count) (This)->lpVtbl->SetRawValue(This,data,offset,count)
+#define ID3D10EffectDepthStencilViewVariable_GetRawValue(This,data,offset,count) (This)->lpVtbl->GetRawValue(This,data,offset,count)
+/*** ID3D10EffectDepthStencilViewVariable methods ***/
+#define ID3D10EffectDepthStencilViewVariable_SetDepthStencil(This,view) (This)->lpVtbl->SetDepthStencil(This,view)
+#define ID3D10EffectDepthStencilViewVariable_GetDepthStencil(This,view) (This)->lpVtbl->GetDepthStencil(This,view)
+#define ID3D10EffectDepthStencilViewVariable_SetDepthStencilArray(This,views,offset,count) (This)->lpVtbl->SetDepthStencilArray(This,views,offset,count)
+#define ID3D10EffectDepthStencilViewVariable_GetDepthStencilArray(This,views,offset,count) (This)->lpVtbl->GetDepthStencilArray(This,views,offset,count)
+#else
+/*** ID3D10EffectVariable methods ***/
+static __WIDL_INLINE WINBOOL ID3D10EffectDepthStencilViewVariable_IsValid(ID3D10EffectDepthStencilViewVariable* This) {
+    return This->lpVtbl->IsValid(This);
+}
+static __WIDL_INLINE ID3D10EffectType * ID3D10EffectDepthStencilViewVariable_GetType(ID3D10EffectDepthStencilViewVariable* This) {
+    return This->lpVtbl->GetType(This);
+}
+static __WIDL_INLINE HRESULT ID3D10EffectDepthStencilViewVariable_GetDesc(ID3D10EffectDepthStencilViewVariable* This,D3D10_EFFECT_VARIABLE_DESC *desc) {
+    return This->lpVtbl->GetDesc(This,desc);
+}
+static __WIDL_INLINE ID3D10EffectVariable * ID3D10EffectDepthStencilViewVariable_GetAnnotationByIndex(ID3D10EffectDepthStencilViewVariable* This,UINT index) {
+    return This->lpVtbl->GetAnnotationByIndex(This,index);
+}
+static __WIDL_INLINE ID3D10EffectVariable * ID3D10EffectDepthStencilViewVariable_GetAnnotationByName(ID3D10EffectDepthStencilViewVariable* This,const char *name) {
+    return This->lpVtbl->GetAnnotationByName(This,name);
+}
+static __WIDL_INLINE ID3D10EffectVariable * ID3D10EffectDepthStencilViewVariable_GetMemberByIndex(ID3D10EffectDepthStencilViewVariable* This,UINT index) {
+    return This->lpVtbl->GetMemberByIndex(This,index);
+}
+static __WIDL_INLINE ID3D10EffectVariable * ID3D10EffectDepthStencilViewVariable_GetMemberByName(ID3D10EffectDepthStencilViewVariable* This,const char *name) {
+    return This->lpVtbl->GetMemberByName(This,name);
+}
+static __WIDL_INLINE ID3D10EffectVariable * ID3D10EffectDepthStencilViewVariable_GetMemberBySemantic(ID3D10EffectDepthStencilViewVariable* This,const char *semantic) {
+    return This->lpVtbl->GetMemberBySemantic(This,semantic);
+}
+static __WIDL_INLINE ID3D10EffectVariable * ID3D10EffectDepthStencilViewVariable_GetElement(ID3D10EffectDepthStencilViewVariable* This,UINT index) {
+    return This->lpVtbl->GetElement(This,index);
+}
+static __WIDL_INLINE ID3D10EffectConstantBuffer * ID3D10EffectDepthStencilViewVariable_GetParentConstantBuffer(ID3D10EffectDepthStencilViewVariable* This) {
+    return This->lpVtbl->GetParentConstantBuffer(This);
+}
+static __WIDL_INLINE ID3D10EffectScalarVariable * ID3D10EffectDepthStencilViewVariable_AsScalar(ID3D10EffectDepthStencilViewVariable* This) {
+    return This->lpVtbl->AsScalar(This);
+}
+static __WIDL_INLINE ID3D10EffectVectorVariable * ID3D10EffectDepthStencilViewVariable_AsVector(ID3D10EffectDepthStencilViewVariable* This) {
+    return This->lpVtbl->AsVector(This);
+}
+static __WIDL_INLINE ID3D10EffectMatrixVariable * ID3D10EffectDepthStencilViewVariable_AsMatrix(ID3D10EffectDepthStencilViewVariable* This) {
+    return This->lpVtbl->AsMatrix(This);
+}
+static __WIDL_INLINE ID3D10EffectStringVariable * ID3D10EffectDepthStencilViewVariable_AsString(ID3D10EffectDepthStencilViewVariable* This) {
+    return This->lpVtbl->AsString(This);
+}
+static __WIDL_INLINE ID3D10EffectShaderResourceVariable * ID3D10EffectDepthStencilViewVariable_AsShaderResource(ID3D10EffectDepthStencilViewVariable* This) {
+    return This->lpVtbl->AsShaderResource(This);
+}
+static __WIDL_INLINE ID3D10EffectRenderTargetViewVariable * ID3D10EffectDepthStencilViewVariable_AsRenderTargetView(ID3D10EffectDepthStencilViewVariable* This) {
+    return This->lpVtbl->AsRenderTargetView(This);
+}
+static __WIDL_INLINE ID3D10EffectDepthStencilViewVariable * ID3D10EffectDepthStencilViewVariable_AsDepthStencilView(ID3D10EffectDepthStencilViewVariable* This) {
+    return This->lpVtbl->AsDepthStencilView(This);
+}
+static __WIDL_INLINE ID3D10EffectConstantBuffer * ID3D10EffectDepthStencilViewVariable_AsConstantBuffer(ID3D10EffectDepthStencilViewVariable* This) {
+    return This->lpVtbl->AsConstantBuffer(This);
+}
+static __WIDL_INLINE ID3D10EffectShaderVariable * ID3D10EffectDepthStencilViewVariable_AsShader(ID3D10EffectDepthStencilViewVariable* This) {
+    return This->lpVtbl->AsShader(This);
+}
+static __WIDL_INLINE ID3D10EffectBlendVariable * ID3D10EffectDepthStencilViewVariable_AsBlend(ID3D10EffectDepthStencilViewVariable* This) {
+    return This->lpVtbl->AsBlend(This);
+}
+static __WIDL_INLINE ID3D10EffectDepthStencilVariable * ID3D10EffectDepthStencilViewVariable_AsDepthStencil(ID3D10EffectDepthStencilViewVariable* This) {
+    return This->lpVtbl->AsDepthStencil(This);
+}
+static __WIDL_INLINE ID3D10EffectRasterizerVariable * ID3D10EffectDepthStencilViewVariable_AsRasterizer(ID3D10EffectDepthStencilViewVariable* This) {
+    return This->lpVtbl->AsRasterizer(This);
+}
+static __WIDL_INLINE ID3D10EffectSamplerVariable * ID3D10EffectDepthStencilViewVariable_AsSampler(ID3D10EffectDepthStencilViewVariable* This) {
+    return This->lpVtbl->AsSampler(This);
+}
+static __WIDL_INLINE HRESULT ID3D10EffectDepthStencilViewVariable_SetRawValue(ID3D10EffectDepthStencilViewVariable* This,void *data,UINT offset,UINT count) {
+    return This->lpVtbl->SetRawValue(This,data,offset,count);
+}
+static __WIDL_INLINE HRESULT ID3D10EffectDepthStencilViewVariable_GetRawValue(ID3D10EffectDepthStencilViewVariable* This,void *data,UINT offset,UINT count) {
+    return This->lpVtbl->GetRawValue(This,data,offset,count);
+}
+/*** ID3D10EffectDepthStencilViewVariable methods ***/
+static __WIDL_INLINE HRESULT ID3D10EffectDepthStencilViewVariable_SetDepthStencil(ID3D10EffectDepthStencilViewVariable* This,ID3D10DepthStencilView *view) {
+    return This->lpVtbl->SetDepthStencil(This,view);
+}
+static __WIDL_INLINE HRESULT ID3D10EffectDepthStencilViewVariable_GetDepthStencil(ID3D10EffectDepthStencilViewVariable* This,ID3D10DepthStencilView **view) {
+    return This->lpVtbl->GetDepthStencil(This,view);
+}
+static __WIDL_INLINE HRESULT ID3D10EffectDepthStencilViewVariable_SetDepthStencilArray(ID3D10EffectDepthStencilViewVariable* This,ID3D10DepthStencilView **views,UINT offset,UINT count) {
+    return This->lpVtbl->SetDepthStencilArray(This,views,offset,count);
+}
+static __WIDL_INLINE HRESULT ID3D10EffectDepthStencilViewVariable_GetDepthStencilArray(ID3D10EffectDepthStencilViewVariable* This,ID3D10DepthStencilView **views,UINT offset,UINT count) {
+    return This->lpVtbl->GetDepthStencilArray(This,views,offset,count);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __ID3D10EffectDepthStencilViewVariable_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * ID3D10EffectShaderVariable interface
+ */
+#ifndef __ID3D10EffectShaderVariable_INTERFACE_DEFINED__
+#define __ID3D10EffectShaderVariable_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_ID3D10EffectShaderVariable, 0x80849279, 0xc799, 0x4797, 0x8c,0x33, 0x04,0x07,0xa0,0x7d,0x9e,0x06);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("80849279-c799-4797-8c33-0407a07d9e06")
+ID3D10EffectShaderVariable : public ID3D10EffectVariable
+{
+    virtual HRESULT STDMETHODCALLTYPE GetShaderDesc(
+        UINT index,
+        D3D10_EFFECT_SHADER_DESC *desc) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetVertexShader(
+        UINT index,
+        ID3D10VertexShader **shader) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetGeometryShader(
+        UINT index,
+        ID3D10GeometryShader **shader) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetPixelShader(
+        UINT index,
+        ID3D10PixelShader **shader) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetInputSignatureElementDesc(
+        UINT shader_index,
+        UINT element_index,
+        D3D10_SIGNATURE_PARAMETER_DESC *desc) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetOutputSignatureElementDesc(
+        UINT shader_index,
+        UINT element_index,
+        D3D10_SIGNATURE_PARAMETER_DESC *desc) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(ID3D10EffectShaderVariable, 0x80849279, 0xc799, 0x4797, 0x8c,0x33, 0x04,0x07,0xa0,0x7d,0x9e,0x06)
+#endif
+#else
+typedef struct ID3D10EffectShaderVariableVtbl {
+    BEGIN_INTERFACE
+
+    /*** ID3D10EffectVariable methods ***/
+    WINBOOL (STDMETHODCALLTYPE *IsValid)(
+        ID3D10EffectShaderVariable *This);
+
+    ID3D10EffectType * (STDMETHODCALLTYPE *GetType)(
+        ID3D10EffectShaderVariable *This);
+
+    HRESULT (STDMETHODCALLTYPE *GetDesc)(
+        ID3D10EffectShaderVariable *This,
+        D3D10_EFFECT_VARIABLE_DESC *desc);
+
+    ID3D10EffectVariable * (STDMETHODCALLTYPE *GetAnnotationByIndex)(
+        ID3D10EffectShaderVariable *This,
+        UINT index);
+
+    ID3D10EffectVariable * (STDMETHODCALLTYPE *GetAnnotationByName)(
+        ID3D10EffectShaderVariable *This,
+        const char *name);
+
+    ID3D10EffectVariable * (STDMETHODCALLTYPE *GetMemberByIndex)(
+        ID3D10EffectShaderVariable *This,
+        UINT index);
+
+    ID3D10EffectVariable * (STDMETHODCALLTYPE *GetMemberByName)(
+        ID3D10EffectShaderVariable *This,
+        const char *name);
+
+    ID3D10EffectVariable * (STDMETHODCALLTYPE *GetMemberBySemantic)(
+        ID3D10EffectShaderVariable *This,
+        const char *semantic);
+
+    ID3D10EffectVariable * (STDMETHODCALLTYPE *GetElement)(
+        ID3D10EffectShaderVariable *This,
+        UINT index);
+
+    ID3D10EffectConstantBuffer * (STDMETHODCALLTYPE *GetParentConstantBuffer)(
+        ID3D10EffectShaderVariable *This);
+
+    ID3D10EffectScalarVariable * (STDMETHODCALLTYPE *AsScalar)(
+        ID3D10EffectShaderVariable *This);
+
+    ID3D10EffectVectorVariable * (STDMETHODCALLTYPE *AsVector)(
+        ID3D10EffectShaderVariable *This);
+
+    ID3D10EffectMatrixVariable * (STDMETHODCALLTYPE *AsMatrix)(
+        ID3D10EffectShaderVariable *This);
+
+    ID3D10EffectStringVariable * (STDMETHODCALLTYPE *AsString)(
+        ID3D10EffectShaderVariable *This);
+
+    ID3D10EffectShaderResourceVariable * (STDMETHODCALLTYPE *AsShaderResource)(
+        ID3D10EffectShaderVariable *This);
+
+    ID3D10EffectRenderTargetViewVariable * (STDMETHODCALLTYPE *AsRenderTargetView)(
+        ID3D10EffectShaderVariable *This);
+
+    ID3D10EffectDepthStencilViewVariable * (STDMETHODCALLTYPE *AsDepthStencilView)(
+        ID3D10EffectShaderVariable *This);
+
+    ID3D10EffectConstantBuffer * (STDMETHODCALLTYPE *AsConstantBuffer)(
+        ID3D10EffectShaderVariable *This);
+
+    ID3D10EffectShaderVariable * (STDMETHODCALLTYPE *AsShader)(
+        ID3D10EffectShaderVariable *This);
+
+    ID3D10EffectBlendVariable * (STDMETHODCALLTYPE *AsBlend)(
+        ID3D10EffectShaderVariable *This);
+
+    ID3D10EffectDepthStencilVariable * (STDMETHODCALLTYPE *AsDepthStencil)(
+        ID3D10EffectShaderVariable *This);
+
+    ID3D10EffectRasterizerVariable * (STDMETHODCALLTYPE *AsRasterizer)(
+        ID3D10EffectShaderVariable *This);
+
+    ID3D10EffectSamplerVariable * (STDMETHODCALLTYPE *AsSampler)(
+        ID3D10EffectShaderVariable *This);
+
+    HRESULT (STDMETHODCALLTYPE *SetRawValue)(
+        ID3D10EffectShaderVariable *This,
+        void *data,
+        UINT offset,
+        UINT count);
+
+    HRESULT (STDMETHODCALLTYPE *GetRawValue)(
+        ID3D10EffectShaderVariable *This,
+        void *data,
+        UINT offset,
+        UINT count);
+
+    /*** ID3D10EffectShaderVariable methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetShaderDesc)(
+        ID3D10EffectShaderVariable *This,
+        UINT index,
+        D3D10_EFFECT_SHADER_DESC *desc);
+
+    HRESULT (STDMETHODCALLTYPE *GetVertexShader)(
+        ID3D10EffectShaderVariable *This,
+        UINT index,
+        ID3D10VertexShader **shader);
+
+    HRESULT (STDMETHODCALLTYPE *GetGeometryShader)(
+        ID3D10EffectShaderVariable *This,
+        UINT index,
+        ID3D10GeometryShader **shader);
+
+    HRESULT (STDMETHODCALLTYPE *GetPixelShader)(
+        ID3D10EffectShaderVariable *This,
+        UINT index,
+        ID3D10PixelShader **shader);
+
+    HRESULT (STDMETHODCALLTYPE *GetInputSignatureElementDesc)(
+        ID3D10EffectShaderVariable *This,
+        UINT shader_index,
+        UINT element_index,
+        D3D10_SIGNATURE_PARAMETER_DESC *desc);
+
+    HRESULT (STDMETHODCALLTYPE *GetOutputSignatureElementDesc)(
+        ID3D10EffectShaderVariable *This,
+        UINT shader_index,
+        UINT element_index,
+        D3D10_SIGNATURE_PARAMETER_DESC *desc);
+
+    END_INTERFACE
+} ID3D10EffectShaderVariableVtbl;
+
+interface ID3D10EffectShaderVariable {
+    CONST_VTBL ID3D10EffectShaderVariableVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** ID3D10EffectVariable methods ***/
+#define ID3D10EffectShaderVariable_IsValid(This) (This)->lpVtbl->IsValid(This)
+#define ID3D10EffectShaderVariable_GetType(This) (This)->lpVtbl->GetType(This)
+#define ID3D10EffectShaderVariable_GetDesc(This,desc) (This)->lpVtbl->GetDesc(This,desc)
+#define ID3D10EffectShaderVariable_GetAnnotationByIndex(This,index) (This)->lpVtbl->GetAnnotationByIndex(This,index)
+#define ID3D10EffectShaderVariable_GetAnnotationByName(This,name) (This)->lpVtbl->GetAnnotationByName(This,name)
+#define ID3D10EffectShaderVariable_GetMemberByIndex(This,index) (This)->lpVtbl->GetMemberByIndex(This,index)
+#define ID3D10EffectShaderVariable_GetMemberByName(This,name) (This)->lpVtbl->GetMemberByName(This,name)
+#define ID3D10EffectShaderVariable_GetMemberBySemantic(This,semantic) (This)->lpVtbl->GetMemberBySemantic(This,semantic)
+#define ID3D10EffectShaderVariable_GetElement(This,index) (This)->lpVtbl->GetElement(This,index)
+#define ID3D10EffectShaderVariable_GetParentConstantBuffer(This) (This)->lpVtbl->GetParentConstantBuffer(This)
+#define ID3D10EffectShaderVariable_AsScalar(This) (This)->lpVtbl->AsScalar(This)
+#define ID3D10EffectShaderVariable_AsVector(This) (This)->lpVtbl->AsVector(This)
+#define ID3D10EffectShaderVariable_AsMatrix(This) (This)->lpVtbl->AsMatrix(This)
+#define ID3D10EffectShaderVariable_AsString(This) (This)->lpVtbl->AsString(This)
+#define ID3D10EffectShaderVariable_AsShaderResource(This) (This)->lpVtbl->AsShaderResource(This)
+#define ID3D10EffectShaderVariable_AsRenderTargetView(This) (This)->lpVtbl->AsRenderTargetView(This)
+#define ID3D10EffectShaderVariable_AsDepthStencilView(This) (This)->lpVtbl->AsDepthStencilView(This)
+#define ID3D10EffectShaderVariable_AsConstantBuffer(This) (This)->lpVtbl->AsConstantBuffer(This)
+#define ID3D10EffectShaderVariable_AsShader(This) (This)->lpVtbl->AsShader(This)
+#define ID3D10EffectShaderVariable_AsBlend(This) (This)->lpVtbl->AsBlend(This)
+#define ID3D10EffectShaderVariable_AsDepthStencil(This) (This)->lpVtbl->AsDepthStencil(This)
+#define ID3D10EffectShaderVariable_AsRasterizer(This) (This)->lpVtbl->AsRasterizer(This)
+#define ID3D10EffectShaderVariable_AsSampler(This) (This)->lpVtbl->AsSampler(This)
+#define ID3D10EffectShaderVariable_SetRawValue(This,data,offset,count) (This)->lpVtbl->SetRawValue(This,data,offset,count)
+#define ID3D10EffectShaderVariable_GetRawValue(This,data,offset,count) (This)->lpVtbl->GetRawValue(This,data,offset,count)
+/*** ID3D10EffectShaderVariable methods ***/
+#define ID3D10EffectShaderVariable_GetShaderDesc(This,index,desc) (This)->lpVtbl->GetShaderDesc(This,index,desc)
+#define ID3D10EffectShaderVariable_GetVertexShader(This,index,shader) (This)->lpVtbl->GetVertexShader(This,index,shader)
+#define ID3D10EffectShaderVariable_GetGeometryShader(This,index,shader) (This)->lpVtbl->GetGeometryShader(This,index,shader)
+#define ID3D10EffectShaderVariable_GetPixelShader(This,index,shader) (This)->lpVtbl->GetPixelShader(This,index,shader)
+#define ID3D10EffectShaderVariable_GetInputSignatureElementDesc(This,shader_index,element_index,desc) (This)->lpVtbl->GetInputSignatureElementDesc(This,shader_index,element_index,desc)
+#define ID3D10EffectShaderVariable_GetOutputSignatureElementDesc(This,shader_index,element_index,desc) (This)->lpVtbl->GetOutputSignatureElementDesc(This,shader_index,element_index,desc)
+#else
+/*** ID3D10EffectVariable methods ***/
+static __WIDL_INLINE WINBOOL ID3D10EffectShaderVariable_IsValid(ID3D10EffectShaderVariable* This) {
+    return This->lpVtbl->IsValid(This);
+}
+static __WIDL_INLINE ID3D10EffectType * ID3D10EffectShaderVariable_GetType(ID3D10EffectShaderVariable* This) {
+    return This->lpVtbl->GetType(This);
+}
+static __WIDL_INLINE HRESULT ID3D10EffectShaderVariable_GetDesc(ID3D10EffectShaderVariable* This,D3D10_EFFECT_VARIABLE_DESC *desc) {
+    return This->lpVtbl->GetDesc(This,desc);
+}
+static __WIDL_INLINE ID3D10EffectVariable * ID3D10EffectShaderVariable_GetAnnotationByIndex(ID3D10EffectShaderVariable* This,UINT index) {
+    return This->lpVtbl->GetAnnotationByIndex(This,index);
+}
+static __WIDL_INLINE ID3D10EffectVariable * ID3D10EffectShaderVariable_GetAnnotationByName(ID3D10EffectShaderVariable* This,const char *name) {
+    return This->lpVtbl->GetAnnotationByName(This,name);
+}
+static __WIDL_INLINE ID3D10EffectVariable * ID3D10EffectShaderVariable_GetMemberByIndex(ID3D10EffectShaderVariable* This,UINT index) {
+    return This->lpVtbl->GetMemberByIndex(This,index);
+}
+static __WIDL_INLINE ID3D10EffectVariable * ID3D10EffectShaderVariable_GetMemberByName(ID3D10EffectShaderVariable* This,const char *name) {
+    return This->lpVtbl->GetMemberByName(This,name);
+}
+static __WIDL_INLINE ID3D10EffectVariable * ID3D10EffectShaderVariable_GetMemberBySemantic(ID3D10EffectShaderVariable* This,const char *semantic) {
+    return This->lpVtbl->GetMemberBySemantic(This,semantic);
+}
+static __WIDL_INLINE ID3D10EffectVariable * ID3D10EffectShaderVariable_GetElement(ID3D10EffectShaderVariable* This,UINT index) {
+    return This->lpVtbl->GetElement(This,index);
+}
+static __WIDL_INLINE ID3D10EffectConstantBuffer * ID3D10EffectShaderVariable_GetParentConstantBuffer(ID3D10EffectShaderVariable* This) {
+    return This->lpVtbl->GetParentConstantBuffer(This);
+}
+static __WIDL_INLINE ID3D10EffectScalarVariable * ID3D10EffectShaderVariable_AsScalar(ID3D10EffectShaderVariable* This) {
+    return This->lpVtbl->AsScalar(This);
+}
+static __WIDL_INLINE ID3D10EffectVectorVariable * ID3D10EffectShaderVariable_AsVector(ID3D10EffectShaderVariable* This) {
+    return This->lpVtbl->AsVector(This);
+}
+static __WIDL_INLINE ID3D10EffectMatrixVariable * ID3D10EffectShaderVariable_AsMatrix(ID3D10EffectShaderVariable* This) {
+    return This->lpVtbl->AsMatrix(This);
+}
+static __WIDL_INLINE ID3D10EffectStringVariable * ID3D10EffectShaderVariable_AsString(ID3D10EffectShaderVariable* This) {
+    return This->lpVtbl->AsString(This);
+}
+static __WIDL_INLINE ID3D10EffectShaderResourceVariable * ID3D10EffectShaderVariable_AsShaderResource(ID3D10EffectShaderVariable* This) {
+    return This->lpVtbl->AsShaderResource(This);
+}
+static __WIDL_INLINE ID3D10EffectRenderTargetViewVariable * ID3D10EffectShaderVariable_AsRenderTargetView(ID3D10EffectShaderVariable* This) {
+    return This->lpVtbl->AsRenderTargetView(This);
+}
+static __WIDL_INLINE ID3D10EffectDepthStencilViewVariable * ID3D10EffectShaderVariable_AsDepthStencilView(ID3D10EffectShaderVariable* This) {
+    return This->lpVtbl->AsDepthStencilView(This);
+}
+static __WIDL_INLINE ID3D10EffectConstantBuffer * ID3D10EffectShaderVariable_AsConstantBuffer(ID3D10EffectShaderVariable* This) {
+    return This->lpVtbl->AsConstantBuffer(This);
+}
+static __WIDL_INLINE ID3D10EffectShaderVariable * ID3D10EffectShaderVariable_AsShader(ID3D10EffectShaderVariable* This) {
+    return This->lpVtbl->AsShader(This);
+}
+static __WIDL_INLINE ID3D10EffectBlendVariable * ID3D10EffectShaderVariable_AsBlend(ID3D10EffectShaderVariable* This) {
+    return This->lpVtbl->AsBlend(This);
+}
+static __WIDL_INLINE ID3D10EffectDepthStencilVariable * ID3D10EffectShaderVariable_AsDepthStencil(ID3D10EffectShaderVariable* This) {
+    return This->lpVtbl->AsDepthStencil(This);
+}
+static __WIDL_INLINE ID3D10EffectRasterizerVariable * ID3D10EffectShaderVariable_AsRasterizer(ID3D10EffectShaderVariable* This) {
+    return This->lpVtbl->AsRasterizer(This);
+}
+static __WIDL_INLINE ID3D10EffectSamplerVariable * ID3D10EffectShaderVariable_AsSampler(ID3D10EffectShaderVariable* This) {
+    return This->lpVtbl->AsSampler(This);
+}
+static __WIDL_INLINE HRESULT ID3D10EffectShaderVariable_SetRawValue(ID3D10EffectShaderVariable* This,void *data,UINT offset,UINT count) {
+    return This->lpVtbl->SetRawValue(This,data,offset,count);
+}
+static __WIDL_INLINE HRESULT ID3D10EffectShaderVariable_GetRawValue(ID3D10EffectShaderVariable* This,void *data,UINT offset,UINT count) {
+    return This->lpVtbl->GetRawValue(This,data,offset,count);
+}
+/*** ID3D10EffectShaderVariable methods ***/
+static __WIDL_INLINE HRESULT ID3D10EffectShaderVariable_GetShaderDesc(ID3D10EffectShaderVariable* This,UINT index,D3D10_EFFECT_SHADER_DESC *desc) {
+    return This->lpVtbl->GetShaderDesc(This,index,desc);
+}
+static __WIDL_INLINE HRESULT ID3D10EffectShaderVariable_GetVertexShader(ID3D10EffectShaderVariable* This,UINT index,ID3D10VertexShader **shader) {
+    return This->lpVtbl->GetVertexShader(This,index,shader);
+}
+static __WIDL_INLINE HRESULT ID3D10EffectShaderVariable_GetGeometryShader(ID3D10EffectShaderVariable* This,UINT index,ID3D10GeometryShader **shader) {
+    return This->lpVtbl->GetGeometryShader(This,index,shader);
+}
+static __WIDL_INLINE HRESULT ID3D10EffectShaderVariable_GetPixelShader(ID3D10EffectShaderVariable* This,UINT index,ID3D10PixelShader **shader) {
+    return This->lpVtbl->GetPixelShader(This,index,shader);
+}
+static __WIDL_INLINE HRESULT ID3D10EffectShaderVariable_GetInputSignatureElementDesc(ID3D10EffectShaderVariable* This,UINT shader_index,UINT element_index,D3D10_SIGNATURE_PARAMETER_DESC *desc) {
+    return This->lpVtbl->GetInputSignatureElementDesc(This,shader_index,element_index,desc);
+}
+static __WIDL_INLINE HRESULT ID3D10EffectShaderVariable_GetOutputSignatureElementDesc(ID3D10EffectShaderVariable* This,UINT shader_index,UINT element_index,D3D10_SIGNATURE_PARAMETER_DESC *desc) {
+    return This->lpVtbl->GetOutputSignatureElementDesc(This,shader_index,element_index,desc);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __ID3D10EffectShaderVariable_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * ID3D10EffectBlendVariable interface
+ */
+#ifndef __ID3D10EffectBlendVariable_INTERFACE_DEFINED__
+#define __ID3D10EffectBlendVariable_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_ID3D10EffectBlendVariable, 0x1fcd2294, 0xdf6d, 0x4eae, 0x86,0xb3, 0x0e,0x91,0x60,0xcf,0xb0,0x7b);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("1fcd2294-df6d-4eae-86b3-0e9160cfb07b")
+ID3D10EffectBlendVariable : public ID3D10EffectVariable
+{
+    virtual HRESULT STDMETHODCALLTYPE GetBlendState(
+        UINT index,
+        ID3D10BlendState **blend_state) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetBackingStore(
+        UINT index,
+        D3D10_BLEND_DESC *desc) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(ID3D10EffectBlendVariable, 0x1fcd2294, 0xdf6d, 0x4eae, 0x86,0xb3, 0x0e,0x91,0x60,0xcf,0xb0,0x7b)
+#endif
+#else
+typedef struct ID3D10EffectBlendVariableVtbl {
+    BEGIN_INTERFACE
+
+    /*** ID3D10EffectVariable methods ***/
+    WINBOOL (STDMETHODCALLTYPE *IsValid)(
+        ID3D10EffectBlendVariable *This);
+
+    ID3D10EffectType * (STDMETHODCALLTYPE *GetType)(
+        ID3D10EffectBlendVariable *This);
+
+    HRESULT (STDMETHODCALLTYPE *GetDesc)(
+        ID3D10EffectBlendVariable *This,
+        D3D10_EFFECT_VARIABLE_DESC *desc);
+
+    ID3D10EffectVariable * (STDMETHODCALLTYPE *GetAnnotationByIndex)(
+        ID3D10EffectBlendVariable *This,
+        UINT index);
+
+    ID3D10EffectVariable * (STDMETHODCALLTYPE *GetAnnotationByName)(
+        ID3D10EffectBlendVariable *This,
+        const char *name);
+
+    ID3D10EffectVariable * (STDMETHODCALLTYPE *GetMemberByIndex)(
+        ID3D10EffectBlendVariable *This,
+        UINT index);
+
+    ID3D10EffectVariable * (STDMETHODCALLTYPE *GetMemberByName)(
+        ID3D10EffectBlendVariable *This,
+        const char *name);
+
+    ID3D10EffectVariable * (STDMETHODCALLTYPE *GetMemberBySemantic)(
+        ID3D10EffectBlendVariable *This,
+        const char *semantic);
+
+    ID3D10EffectVariable * (STDMETHODCALLTYPE *GetElement)(
+        ID3D10EffectBlendVariable *This,
+        UINT index);
+
+    ID3D10EffectConstantBuffer * (STDMETHODCALLTYPE *GetParentConstantBuffer)(
+        ID3D10EffectBlendVariable *This);
+
+    ID3D10EffectScalarVariable * (STDMETHODCALLTYPE *AsScalar)(
+        ID3D10EffectBlendVariable *This);
+
+    ID3D10EffectVectorVariable * (STDMETHODCALLTYPE *AsVector)(
+        ID3D10EffectBlendVariable *This);
+
+    ID3D10EffectMatrixVariable * (STDMETHODCALLTYPE *AsMatrix)(
+        ID3D10EffectBlendVariable *This);
+
+    ID3D10EffectStringVariable * (STDMETHODCALLTYPE *AsString)(
+        ID3D10EffectBlendVariable *This);
+
+    ID3D10EffectShaderResourceVariable * (STDMETHODCALLTYPE *AsShaderResource)(
+        ID3D10EffectBlendVariable *This);
+
+    ID3D10EffectRenderTargetViewVariable * (STDMETHODCALLTYPE *AsRenderTargetView)(
+        ID3D10EffectBlendVariable *This);
+
+    ID3D10EffectDepthStencilViewVariable * (STDMETHODCALLTYPE *AsDepthStencilView)(
+        ID3D10EffectBlendVariable *This);
+
+    ID3D10EffectConstantBuffer * (STDMETHODCALLTYPE *AsConstantBuffer)(
+        ID3D10EffectBlendVariable *This);
+
+    ID3D10EffectShaderVariable * (STDMETHODCALLTYPE *AsShader)(
+        ID3D10EffectBlendVariable *This);
+
+    ID3D10EffectBlendVariable * (STDMETHODCALLTYPE *AsBlend)(
+        ID3D10EffectBlendVariable *This);
+
+    ID3D10EffectDepthStencilVariable * (STDMETHODCALLTYPE *AsDepthStencil)(
+        ID3D10EffectBlendVariable *This);
+
+    ID3D10EffectRasterizerVariable * (STDMETHODCALLTYPE *AsRasterizer)(
+        ID3D10EffectBlendVariable *This);
+
+    ID3D10EffectSamplerVariable * (STDMETHODCALLTYPE *AsSampler)(
+        ID3D10EffectBlendVariable *This);
+
+    HRESULT (STDMETHODCALLTYPE *SetRawValue)(
+        ID3D10EffectBlendVariable *This,
+        void *data,
+        UINT offset,
+        UINT count);
+
+    HRESULT (STDMETHODCALLTYPE *GetRawValue)(
+        ID3D10EffectBlendVariable *This,
+        void *data,
+        UINT offset,
+        UINT count);
+
+    /*** ID3D10EffectBlendVariable methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetBlendState)(
+        ID3D10EffectBlendVariable *This,
+        UINT index,
+        ID3D10BlendState **blend_state);
+
+    HRESULT (STDMETHODCALLTYPE *GetBackingStore)(
+        ID3D10EffectBlendVariable *This,
+        UINT index,
+        D3D10_BLEND_DESC *desc);
+
+    END_INTERFACE
+} ID3D10EffectBlendVariableVtbl;
+
+interface ID3D10EffectBlendVariable {
+    CONST_VTBL ID3D10EffectBlendVariableVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** ID3D10EffectVariable methods ***/
+#define ID3D10EffectBlendVariable_IsValid(This) (This)->lpVtbl->IsValid(This)
+#define ID3D10EffectBlendVariable_GetType(This) (This)->lpVtbl->GetType(This)
+#define ID3D10EffectBlendVariable_GetDesc(This,desc) (This)->lpVtbl->GetDesc(This,desc)
+#define ID3D10EffectBlendVariable_GetAnnotationByIndex(This,index) (This)->lpVtbl->GetAnnotationByIndex(This,index)
+#define ID3D10EffectBlendVariable_GetAnnotationByName(This,name) (This)->lpVtbl->GetAnnotationByName(This,name)
+#define ID3D10EffectBlendVariable_GetMemberByIndex(This,index) (This)->lpVtbl->GetMemberByIndex(This,index)
+#define ID3D10EffectBlendVariable_GetMemberByName(This,name) (This)->lpVtbl->GetMemberByName(This,name)
+#define ID3D10EffectBlendVariable_GetMemberBySemantic(This,semantic) (This)->lpVtbl->GetMemberBySemantic(This,semantic)
+#define ID3D10EffectBlendVariable_GetElement(This,index) (This)->lpVtbl->GetElement(This,index)
+#define ID3D10EffectBlendVariable_GetParentConstantBuffer(This) (This)->lpVtbl->GetParentConstantBuffer(This)
+#define ID3D10EffectBlendVariable_AsScalar(This) (This)->lpVtbl->AsScalar(This)
+#define ID3D10EffectBlendVariable_AsVector(This) (This)->lpVtbl->AsVector(This)
+#define ID3D10EffectBlendVariable_AsMatrix(This) (This)->lpVtbl->AsMatrix(This)
+#define ID3D10EffectBlendVariable_AsString(This) (This)->lpVtbl->AsString(This)
+#define ID3D10EffectBlendVariable_AsShaderResource(This) (This)->lpVtbl->AsShaderResource(This)
+#define ID3D10EffectBlendVariable_AsRenderTargetView(This) (This)->lpVtbl->AsRenderTargetView(This)
+#define ID3D10EffectBlendVariable_AsDepthStencilView(This) (This)->lpVtbl->AsDepthStencilView(This)
+#define ID3D10EffectBlendVariable_AsConstantBuffer(This) (This)->lpVtbl->AsConstantBuffer(This)
+#define ID3D10EffectBlendVariable_AsShader(This) (This)->lpVtbl->AsShader(This)
+#define ID3D10EffectBlendVariable_AsBlend(This) (This)->lpVtbl->AsBlend(This)
+#define ID3D10EffectBlendVariable_AsDepthStencil(This) (This)->lpVtbl->AsDepthStencil(This)
+#define ID3D10EffectBlendVariable_AsRasterizer(This) (This)->lpVtbl->AsRasterizer(This)
+#define ID3D10EffectBlendVariable_AsSampler(This) (This)->lpVtbl->AsSampler(This)
+#define ID3D10EffectBlendVariable_SetRawValue(This,data,offset,count) (This)->lpVtbl->SetRawValue(This,data,offset,count)
+#define ID3D10EffectBlendVariable_GetRawValue(This,data,offset,count) (This)->lpVtbl->GetRawValue(This,data,offset,count)
+/*** ID3D10EffectBlendVariable methods ***/
+#define ID3D10EffectBlendVariable_GetBlendState(This,index,blend_state) (This)->lpVtbl->GetBlendState(This,index,blend_state)
+#define ID3D10EffectBlendVariable_GetBackingStore(This,index,desc) (This)->lpVtbl->GetBackingStore(This,index,desc)
+#else
+/*** ID3D10EffectVariable methods ***/
+static __WIDL_INLINE WINBOOL ID3D10EffectBlendVariable_IsValid(ID3D10EffectBlendVariable* This) {
+    return This->lpVtbl->IsValid(This);
+}
+static __WIDL_INLINE ID3D10EffectType * ID3D10EffectBlendVariable_GetType(ID3D10EffectBlendVariable* This) {
+    return This->lpVtbl->GetType(This);
+}
+static __WIDL_INLINE HRESULT ID3D10EffectBlendVariable_GetDesc(ID3D10EffectBlendVariable* This,D3D10_EFFECT_VARIABLE_DESC *desc) {
+    return This->lpVtbl->GetDesc(This,desc);
+}
+static __WIDL_INLINE ID3D10EffectVariable * ID3D10EffectBlendVariable_GetAnnotationByIndex(ID3D10EffectBlendVariable* This,UINT index) {
+    return This->lpVtbl->GetAnnotationByIndex(This,index);
+}
+static __WIDL_INLINE ID3D10EffectVariable * ID3D10EffectBlendVariable_GetAnnotationByName(ID3D10EffectBlendVariable* This,const char *name) {
+    return This->lpVtbl->GetAnnotationByName(This,name);
+}
+static __WIDL_INLINE ID3D10EffectVariable * ID3D10EffectBlendVariable_GetMemberByIndex(ID3D10EffectBlendVariable* This,UINT index) {
+    return This->lpVtbl->GetMemberByIndex(This,index);
+}
+static __WIDL_INLINE ID3D10EffectVariable * ID3D10EffectBlendVariable_GetMemberByName(ID3D10EffectBlendVariable* This,const char *name) {
+    return This->lpVtbl->GetMemberByName(This,name);
+}
+static __WIDL_INLINE ID3D10EffectVariable * ID3D10EffectBlendVariable_GetMemberBySemantic(ID3D10EffectBlendVariable* This,const char *semantic) {
+    return This->lpVtbl->GetMemberBySemantic(This,semantic);
+}
+static __WIDL_INLINE ID3D10EffectVariable * ID3D10EffectBlendVariable_GetElement(ID3D10EffectBlendVariable* This,UINT index) {
+    return This->lpVtbl->GetElement(This,index);
+}
+static __WIDL_INLINE ID3D10EffectConstantBuffer * ID3D10EffectBlendVariable_GetParentConstantBuffer(ID3D10EffectBlendVariable* This) {
+    return This->lpVtbl->GetParentConstantBuffer(This);
+}
+static __WIDL_INLINE ID3D10EffectScalarVariable * ID3D10EffectBlendVariable_AsScalar(ID3D10EffectBlendVariable* This) {
+    return This->lpVtbl->AsScalar(This);
+}
+static __WIDL_INLINE ID3D10EffectVectorVariable * ID3D10EffectBlendVariable_AsVector(ID3D10EffectBlendVariable* This) {
+    return This->lpVtbl->AsVector(This);
+}
+static __WIDL_INLINE ID3D10EffectMatrixVariable * ID3D10EffectBlendVariable_AsMatrix(ID3D10EffectBlendVariable* This) {
+    return This->lpVtbl->AsMatrix(This);
+}
+static __WIDL_INLINE ID3D10EffectStringVariable * ID3D10EffectBlendVariable_AsString(ID3D10EffectBlendVariable* This) {
+    return This->lpVtbl->AsString(This);
+}
+static __WIDL_INLINE ID3D10EffectShaderResourceVariable * ID3D10EffectBlendVariable_AsShaderResource(ID3D10EffectBlendVariable* This) {
+    return This->lpVtbl->AsShaderResource(This);
+}
+static __WIDL_INLINE ID3D10EffectRenderTargetViewVariable * ID3D10EffectBlendVariable_AsRenderTargetView(ID3D10EffectBlendVariable* This) {
+    return This->lpVtbl->AsRenderTargetView(This);
+}
+static __WIDL_INLINE ID3D10EffectDepthStencilViewVariable * ID3D10EffectBlendVariable_AsDepthStencilView(ID3D10EffectBlendVariable* This) {
+    return This->lpVtbl->AsDepthStencilView(This);
+}
+static __WIDL_INLINE ID3D10EffectConstantBuffer * ID3D10EffectBlendVariable_AsConstantBuffer(ID3D10EffectBlendVariable* This) {
+    return This->lpVtbl->AsConstantBuffer(This);
+}
+static __WIDL_INLINE ID3D10EffectShaderVariable * ID3D10EffectBlendVariable_AsShader(ID3D10EffectBlendVariable* This) {
+    return This->lpVtbl->AsShader(This);
+}
+static __WIDL_INLINE ID3D10EffectBlendVariable * ID3D10EffectBlendVariable_AsBlend(ID3D10EffectBlendVariable* This) {
+    return This->lpVtbl->AsBlend(This);
+}
+static __WIDL_INLINE ID3D10EffectDepthStencilVariable * ID3D10EffectBlendVariable_AsDepthStencil(ID3D10EffectBlendVariable* This) {
+    return This->lpVtbl->AsDepthStencil(This);
+}
+static __WIDL_INLINE ID3D10EffectRasterizerVariable * ID3D10EffectBlendVariable_AsRasterizer(ID3D10EffectBlendVariable* This) {
+    return This->lpVtbl->AsRasterizer(This);
+}
+static __WIDL_INLINE ID3D10EffectSamplerVariable * ID3D10EffectBlendVariable_AsSampler(ID3D10EffectBlendVariable* This) {
+    return This->lpVtbl->AsSampler(This);
+}
+static __WIDL_INLINE HRESULT ID3D10EffectBlendVariable_SetRawValue(ID3D10EffectBlendVariable* This,void *data,UINT offset,UINT count) {
+    return This->lpVtbl->SetRawValue(This,data,offset,count);
+}
+static __WIDL_INLINE HRESULT ID3D10EffectBlendVariable_GetRawValue(ID3D10EffectBlendVariable* This,void *data,UINT offset,UINT count) {
+    return This->lpVtbl->GetRawValue(This,data,offset,count);
+}
+/*** ID3D10EffectBlendVariable methods ***/
+static __WIDL_INLINE HRESULT ID3D10EffectBlendVariable_GetBlendState(ID3D10EffectBlendVariable* This,UINT index,ID3D10BlendState **blend_state) {
+    return This->lpVtbl->GetBlendState(This,index,blend_state);
+}
+static __WIDL_INLINE HRESULT ID3D10EffectBlendVariable_GetBackingStore(ID3D10EffectBlendVariable* This,UINT index,D3D10_BLEND_DESC *desc) {
+    return This->lpVtbl->GetBackingStore(This,index,desc);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __ID3D10EffectBlendVariable_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * ID3D10EffectDepthStencilVariable interface
+ */
+#ifndef __ID3D10EffectDepthStencilVariable_INTERFACE_DEFINED__
+#define __ID3D10EffectDepthStencilVariable_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_ID3D10EffectDepthStencilVariable, 0xaf482368, 0x330a, 0x46a5, 0x9a,0x5c, 0x01,0xc7,0x1a,0xf2,0x4c,0x8d);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("af482368-330a-46a5-9a5c-01c71af24c8d")
+ID3D10EffectDepthStencilVariable : public ID3D10EffectVariable
+{
+    virtual HRESULT STDMETHODCALLTYPE GetDepthStencilState(
+        UINT index,
+        ID3D10DepthStencilState **depth_stencil_state) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetBackingStore(
+        UINT index,
+        D3D10_DEPTH_STENCIL_DESC *desc) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(ID3D10EffectDepthStencilVariable, 0xaf482368, 0x330a, 0x46a5, 0x9a,0x5c, 0x01,0xc7,0x1a,0xf2,0x4c,0x8d)
+#endif
+#else
+typedef struct ID3D10EffectDepthStencilVariableVtbl {
+    BEGIN_INTERFACE
+
+    /*** ID3D10EffectVariable methods ***/
+    WINBOOL (STDMETHODCALLTYPE *IsValid)(
+        ID3D10EffectDepthStencilVariable *This);
+
+    ID3D10EffectType * (STDMETHODCALLTYPE *GetType)(
+        ID3D10EffectDepthStencilVariable *This);
+
+    HRESULT (STDMETHODCALLTYPE *GetDesc)(
+        ID3D10EffectDepthStencilVariable *This,
+        D3D10_EFFECT_VARIABLE_DESC *desc);
+
+    ID3D10EffectVariable * (STDMETHODCALLTYPE *GetAnnotationByIndex)(
+        ID3D10EffectDepthStencilVariable *This,
+        UINT index);
+
+    ID3D10EffectVariable * (STDMETHODCALLTYPE *GetAnnotationByName)(
+        ID3D10EffectDepthStencilVariable *This,
+        const char *name);
+
+    ID3D10EffectVariable * (STDMETHODCALLTYPE *GetMemberByIndex)(
+        ID3D10EffectDepthStencilVariable *This,
+        UINT index);
+
+    ID3D10EffectVariable * (STDMETHODCALLTYPE *GetMemberByName)(
+        ID3D10EffectDepthStencilVariable *This,
+        const char *name);
+
+    ID3D10EffectVariable * (STDMETHODCALLTYPE *GetMemberBySemantic)(
+        ID3D10EffectDepthStencilVariable *This,
+        const char *semantic);
+
+    ID3D10EffectVariable * (STDMETHODCALLTYPE *GetElement)(
+        ID3D10EffectDepthStencilVariable *This,
+        UINT index);
+
+    ID3D10EffectConstantBuffer * (STDMETHODCALLTYPE *GetParentConstantBuffer)(
+        ID3D10EffectDepthStencilVariable *This);
+
+    ID3D10EffectScalarVariable * (STDMETHODCALLTYPE *AsScalar)(
+        ID3D10EffectDepthStencilVariable *This);
+
+    ID3D10EffectVectorVariable * (STDMETHODCALLTYPE *AsVector)(
+        ID3D10EffectDepthStencilVariable *This);
+
+    ID3D10EffectMatrixVariable * (STDMETHODCALLTYPE *AsMatrix)(
+        ID3D10EffectDepthStencilVariable *This);
+
+    ID3D10EffectStringVariable * (STDMETHODCALLTYPE *AsString)(
+        ID3D10EffectDepthStencilVariable *This);
+
+    ID3D10EffectShaderResourceVariable * (STDMETHODCALLTYPE *AsShaderResource)(
+        ID3D10EffectDepthStencilVariable *This);
+
+    ID3D10EffectRenderTargetViewVariable * (STDMETHODCALLTYPE *AsRenderTargetView)(
+        ID3D10EffectDepthStencilVariable *This);
+
+    ID3D10EffectDepthStencilViewVariable * (STDMETHODCALLTYPE *AsDepthStencilView)(
+        ID3D10EffectDepthStencilVariable *This);
+
+    ID3D10EffectConstantBuffer * (STDMETHODCALLTYPE *AsConstantBuffer)(
+        ID3D10EffectDepthStencilVariable *This);
+
+    ID3D10EffectShaderVariable * (STDMETHODCALLTYPE *AsShader)(
+        ID3D10EffectDepthStencilVariable *This);
+
+    ID3D10EffectBlendVariable * (STDMETHODCALLTYPE *AsBlend)(
+        ID3D10EffectDepthStencilVariable *This);
+
+    ID3D10EffectDepthStencilVariable * (STDMETHODCALLTYPE *AsDepthStencil)(
+        ID3D10EffectDepthStencilVariable *This);
+
+    ID3D10EffectRasterizerVariable * (STDMETHODCALLTYPE *AsRasterizer)(
+        ID3D10EffectDepthStencilVariable *This);
+
+    ID3D10EffectSamplerVariable * (STDMETHODCALLTYPE *AsSampler)(
+        ID3D10EffectDepthStencilVariable *This);
+
+    HRESULT (STDMETHODCALLTYPE *SetRawValue)(
+        ID3D10EffectDepthStencilVariable *This,
+        void *data,
+        UINT offset,
+        UINT count);
+
+    HRESULT (STDMETHODCALLTYPE *GetRawValue)(
+        ID3D10EffectDepthStencilVariable *This,
+        void *data,
+        UINT offset,
+        UINT count);
+
+    /*** ID3D10EffectDepthStencilVariable methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetDepthStencilState)(
+        ID3D10EffectDepthStencilVariable *This,
+        UINT index,
+        ID3D10DepthStencilState **depth_stencil_state);
+
+    HRESULT (STDMETHODCALLTYPE *GetBackingStore)(
+        ID3D10EffectDepthStencilVariable *This,
+        UINT index,
+        D3D10_DEPTH_STENCIL_DESC *desc);
+
+    END_INTERFACE
+} ID3D10EffectDepthStencilVariableVtbl;
+
+interface ID3D10EffectDepthStencilVariable {
+    CONST_VTBL ID3D10EffectDepthStencilVariableVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** ID3D10EffectVariable methods ***/
+#define ID3D10EffectDepthStencilVariable_IsValid(This) (This)->lpVtbl->IsValid(This)
+#define ID3D10EffectDepthStencilVariable_GetType(This) (This)->lpVtbl->GetType(This)
+#define ID3D10EffectDepthStencilVariable_GetDesc(This,desc) (This)->lpVtbl->GetDesc(This,desc)
+#define ID3D10EffectDepthStencilVariable_GetAnnotationByIndex(This,index) (This)->lpVtbl->GetAnnotationByIndex(This,index)
+#define ID3D10EffectDepthStencilVariable_GetAnnotationByName(This,name) (This)->lpVtbl->GetAnnotationByName(This,name)
+#define ID3D10EffectDepthStencilVariable_GetMemberByIndex(This,index) (This)->lpVtbl->GetMemberByIndex(This,index)
+#define ID3D10EffectDepthStencilVariable_GetMemberByName(This,name) (This)->lpVtbl->GetMemberByName(This,name)
+#define ID3D10EffectDepthStencilVariable_GetMemberBySemantic(This,semantic) (This)->lpVtbl->GetMemberBySemantic(This,semantic)
+#define ID3D10EffectDepthStencilVariable_GetElement(This,index) (This)->lpVtbl->GetElement(This,index)
+#define ID3D10EffectDepthStencilVariable_GetParentConstantBuffer(This) (This)->lpVtbl->GetParentConstantBuffer(This)
+#define ID3D10EffectDepthStencilVariable_AsScalar(This) (This)->lpVtbl->AsScalar(This)
+#define ID3D10EffectDepthStencilVariable_AsVector(This) (This)->lpVtbl->AsVector(This)
+#define ID3D10EffectDepthStencilVariable_AsMatrix(This) (This)->lpVtbl->AsMatrix(This)
+#define ID3D10EffectDepthStencilVariable_AsString(This) (This)->lpVtbl->AsString(This)
+#define ID3D10EffectDepthStencilVariable_AsShaderResource(This) (This)->lpVtbl->AsShaderResource(This)
+#define ID3D10EffectDepthStencilVariable_AsRenderTargetView(This) (This)->lpVtbl->AsRenderTargetView(This)
+#define ID3D10EffectDepthStencilVariable_AsDepthStencilView(This) (This)->lpVtbl->AsDepthStencilView(This)
+#define ID3D10EffectDepthStencilVariable_AsConstantBuffer(This) (This)->lpVtbl->AsConstantBuffer(This)
+#define ID3D10EffectDepthStencilVariable_AsShader(This) (This)->lpVtbl->AsShader(This)
+#define ID3D10EffectDepthStencilVariable_AsBlend(This) (This)->lpVtbl->AsBlend(This)
+#define ID3D10EffectDepthStencilVariable_AsDepthStencil(This) (This)->lpVtbl->AsDepthStencil(This)
+#define ID3D10EffectDepthStencilVariable_AsRasterizer(This) (This)->lpVtbl->AsRasterizer(This)
+#define ID3D10EffectDepthStencilVariable_AsSampler(This) (This)->lpVtbl->AsSampler(This)
+#define ID3D10EffectDepthStencilVariable_SetRawValue(This,data,offset,count) (This)->lpVtbl->SetRawValue(This,data,offset,count)
+#define ID3D10EffectDepthStencilVariable_GetRawValue(This,data,offset,count) (This)->lpVtbl->GetRawValue(This,data,offset,count)
+/*** ID3D10EffectDepthStencilVariable methods ***/
+#define ID3D10EffectDepthStencilVariable_GetDepthStencilState(This,index,depth_stencil_state) (This)->lpVtbl->GetDepthStencilState(This,index,depth_stencil_state)
+#define ID3D10EffectDepthStencilVariable_GetBackingStore(This,index,desc) (This)->lpVtbl->GetBackingStore(This,index,desc)
+#else
+/*** ID3D10EffectVariable methods ***/
+static __WIDL_INLINE WINBOOL ID3D10EffectDepthStencilVariable_IsValid(ID3D10EffectDepthStencilVariable* This) {
+    return This->lpVtbl->IsValid(This);
+}
+static __WIDL_INLINE ID3D10EffectType * ID3D10EffectDepthStencilVariable_GetType(ID3D10EffectDepthStencilVariable* This) {
+    return This->lpVtbl->GetType(This);
+}
+static __WIDL_INLINE HRESULT ID3D10EffectDepthStencilVariable_GetDesc(ID3D10EffectDepthStencilVariable* This,D3D10_EFFECT_VARIABLE_DESC *desc) {
+    return This->lpVtbl->GetDesc(This,desc);
+}
+static __WIDL_INLINE ID3D10EffectVariable * ID3D10EffectDepthStencilVariable_GetAnnotationByIndex(ID3D10EffectDepthStencilVariable* This,UINT index) {
+    return This->lpVtbl->GetAnnotationByIndex(This,index);
+}
+static __WIDL_INLINE ID3D10EffectVariable * ID3D10EffectDepthStencilVariable_GetAnnotationByName(ID3D10EffectDepthStencilVariable* This,const char *name) {
+    return This->lpVtbl->GetAnnotationByName(This,name);
+}
+static __WIDL_INLINE ID3D10EffectVariable * ID3D10EffectDepthStencilVariable_GetMemberByIndex(ID3D10EffectDepthStencilVariable* This,UINT index) {
+    return This->lpVtbl->GetMemberByIndex(This,index);
+}
+static __WIDL_INLINE ID3D10EffectVariable * ID3D10EffectDepthStencilVariable_GetMemberByName(ID3D10EffectDepthStencilVariable* This,const char *name) {
+    return This->lpVtbl->GetMemberByName(This,name);
+}
+static __WIDL_INLINE ID3D10EffectVariable * ID3D10EffectDepthStencilVariable_GetMemberBySemantic(ID3D10EffectDepthStencilVariable* This,const char *semantic) {
+    return This->lpVtbl->GetMemberBySemantic(This,semantic);
+}
+static __WIDL_INLINE ID3D10EffectVariable * ID3D10EffectDepthStencilVariable_GetElement(ID3D10EffectDepthStencilVariable* This,UINT index) {
+    return This->lpVtbl->GetElement(This,index);
+}
+static __WIDL_INLINE ID3D10EffectConstantBuffer * ID3D10EffectDepthStencilVariable_GetParentConstantBuffer(ID3D10EffectDepthStencilVariable* This) {
+    return This->lpVtbl->GetParentConstantBuffer(This);
+}
+static __WIDL_INLINE ID3D10EffectScalarVariable * ID3D10EffectDepthStencilVariable_AsScalar(ID3D10EffectDepthStencilVariable* This) {
+    return This->lpVtbl->AsScalar(This);
+}
+static __WIDL_INLINE ID3D10EffectVectorVariable * ID3D10EffectDepthStencilVariable_AsVector(ID3D10EffectDepthStencilVariable* This) {
+    return This->lpVtbl->AsVector(This);
+}
+static __WIDL_INLINE ID3D10EffectMatrixVariable * ID3D10EffectDepthStencilVariable_AsMatrix(ID3D10EffectDepthStencilVariable* This) {
+    return This->lpVtbl->AsMatrix(This);
+}
+static __WIDL_INLINE ID3D10EffectStringVariable * ID3D10EffectDepthStencilVariable_AsString(ID3D10EffectDepthStencilVariable* This) {
+    return This->lpVtbl->AsString(This);
+}
+static __WIDL_INLINE ID3D10EffectShaderResourceVariable * ID3D10EffectDepthStencilVariable_AsShaderResource(ID3D10EffectDepthStencilVariable* This) {
+    return This->lpVtbl->AsShaderResource(This);
+}
+static __WIDL_INLINE ID3D10EffectRenderTargetViewVariable * ID3D10EffectDepthStencilVariable_AsRenderTargetView(ID3D10EffectDepthStencilVariable* This) {
+    return This->lpVtbl->AsRenderTargetView(This);
+}
+static __WIDL_INLINE ID3D10EffectDepthStencilViewVariable * ID3D10EffectDepthStencilVariable_AsDepthStencilView(ID3D10EffectDepthStencilVariable* This) {
+    return This->lpVtbl->AsDepthStencilView(This);
+}
+static __WIDL_INLINE ID3D10EffectConstantBuffer * ID3D10EffectDepthStencilVariable_AsConstantBuffer(ID3D10EffectDepthStencilVariable* This) {
+    return This->lpVtbl->AsConstantBuffer(This);
+}
+static __WIDL_INLINE ID3D10EffectShaderVariable * ID3D10EffectDepthStencilVariable_AsShader(ID3D10EffectDepthStencilVariable* This) {
+    return This->lpVtbl->AsShader(This);
+}
+static __WIDL_INLINE ID3D10EffectBlendVariable * ID3D10EffectDepthStencilVariable_AsBlend(ID3D10EffectDepthStencilVariable* This) {
+    return This->lpVtbl->AsBlend(This);
+}
+static __WIDL_INLINE ID3D10EffectDepthStencilVariable * ID3D10EffectDepthStencilVariable_AsDepthStencil(ID3D10EffectDepthStencilVariable* This) {
+    return This->lpVtbl->AsDepthStencil(This);
+}
+static __WIDL_INLINE ID3D10EffectRasterizerVariable * ID3D10EffectDepthStencilVariable_AsRasterizer(ID3D10EffectDepthStencilVariable* This) {
+    return This->lpVtbl->AsRasterizer(This);
+}
+static __WIDL_INLINE ID3D10EffectSamplerVariable * ID3D10EffectDepthStencilVariable_AsSampler(ID3D10EffectDepthStencilVariable* This) {
+    return This->lpVtbl->AsSampler(This);
+}
+static __WIDL_INLINE HRESULT ID3D10EffectDepthStencilVariable_SetRawValue(ID3D10EffectDepthStencilVariable* This,void *data,UINT offset,UINT count) {
+    return This->lpVtbl->SetRawValue(This,data,offset,count);
+}
+static __WIDL_INLINE HRESULT ID3D10EffectDepthStencilVariable_GetRawValue(ID3D10EffectDepthStencilVariable* This,void *data,UINT offset,UINT count) {
+    return This->lpVtbl->GetRawValue(This,data,offset,count);
+}
+/*** ID3D10EffectDepthStencilVariable methods ***/
+static __WIDL_INLINE HRESULT ID3D10EffectDepthStencilVariable_GetDepthStencilState(ID3D10EffectDepthStencilVariable* This,UINT index,ID3D10DepthStencilState **depth_stencil_state) {
+    return This->lpVtbl->GetDepthStencilState(This,index,depth_stencil_state);
+}
+static __WIDL_INLINE HRESULT ID3D10EffectDepthStencilVariable_GetBackingStore(ID3D10EffectDepthStencilVariable* This,UINT index,D3D10_DEPTH_STENCIL_DESC *desc) {
+    return This->lpVtbl->GetBackingStore(This,index,desc);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __ID3D10EffectDepthStencilVariable_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * ID3D10EffectRasterizerVariable interface
+ */
+#ifndef __ID3D10EffectRasterizerVariable_INTERFACE_DEFINED__
+#define __ID3D10EffectRasterizerVariable_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_ID3D10EffectRasterizerVariable, 0x21af9f0e, 0x4d94, 0x4ea9, 0x97,0x85, 0x2c,0xb7,0x6b,0x8c,0x0b,0x34);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("21af9f0e-4d94-4ea9-9785-2cb76b8c0b34")
+ID3D10EffectRasterizerVariable : public ID3D10EffectVariable
+{
+    virtual HRESULT STDMETHODCALLTYPE GetRasterizerState(
+        UINT index,
+        ID3D10RasterizerState **rasterizer_state) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetBackingStore(
+        UINT index,
+        D3D10_RASTERIZER_DESC *desc) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(ID3D10EffectRasterizerVariable, 0x21af9f0e, 0x4d94, 0x4ea9, 0x97,0x85, 0x2c,0xb7,0x6b,0x8c,0x0b,0x34)
+#endif
+#else
+typedef struct ID3D10EffectRasterizerVariableVtbl {
+    BEGIN_INTERFACE
+
+    /*** ID3D10EffectVariable methods ***/
+    WINBOOL (STDMETHODCALLTYPE *IsValid)(
+        ID3D10EffectRasterizerVariable *This);
+
+    ID3D10EffectType * (STDMETHODCALLTYPE *GetType)(
+        ID3D10EffectRasterizerVariable *This);
+
+    HRESULT (STDMETHODCALLTYPE *GetDesc)(
+        ID3D10EffectRasterizerVariable *This,
+        D3D10_EFFECT_VARIABLE_DESC *desc);
+
+    ID3D10EffectVariable * (STDMETHODCALLTYPE *GetAnnotationByIndex)(
+        ID3D10EffectRasterizerVariable *This,
+        UINT index);
+
+    ID3D10EffectVariable * (STDMETHODCALLTYPE *GetAnnotationByName)(
+        ID3D10EffectRasterizerVariable *This,
+        const char *name);
+
+    ID3D10EffectVariable * (STDMETHODCALLTYPE *GetMemberByIndex)(
+        ID3D10EffectRasterizerVariable *This,
+        UINT index);
+
+    ID3D10EffectVariable * (STDMETHODCALLTYPE *GetMemberByName)(
+        ID3D10EffectRasterizerVariable *This,
+        const char *name);
+
+    ID3D10EffectVariable * (STDMETHODCALLTYPE *GetMemberBySemantic)(
+        ID3D10EffectRasterizerVariable *This,
+        const char *semantic);
+
+    ID3D10EffectVariable * (STDMETHODCALLTYPE *GetElement)(
+        ID3D10EffectRasterizerVariable *This,
+        UINT index);
+
+    ID3D10EffectConstantBuffer * (STDMETHODCALLTYPE *GetParentConstantBuffer)(
+        ID3D10EffectRasterizerVariable *This);
+
+    ID3D10EffectScalarVariable * (STDMETHODCALLTYPE *AsScalar)(
+        ID3D10EffectRasterizerVariable *This);
+
+    ID3D10EffectVectorVariable * (STDMETHODCALLTYPE *AsVector)(
+        ID3D10EffectRasterizerVariable *This);
+
+    ID3D10EffectMatrixVariable * (STDMETHODCALLTYPE *AsMatrix)(
+        ID3D10EffectRasterizerVariable *This);
+
+    ID3D10EffectStringVariable * (STDMETHODCALLTYPE *AsString)(
+        ID3D10EffectRasterizerVariable *This);
+
+    ID3D10EffectShaderResourceVariable * (STDMETHODCALLTYPE *AsShaderResource)(
+        ID3D10EffectRasterizerVariable *This);
+
+    ID3D10EffectRenderTargetViewVariable * (STDMETHODCALLTYPE *AsRenderTargetView)(
+        ID3D10EffectRasterizerVariable *This);
+
+    ID3D10EffectDepthStencilViewVariable * (STDMETHODCALLTYPE *AsDepthStencilView)(
+        ID3D10EffectRasterizerVariable *This);
+
+    ID3D10EffectConstantBuffer * (STDMETHODCALLTYPE *AsConstantBuffer)(
+        ID3D10EffectRasterizerVariable *This);
+
+    ID3D10EffectShaderVariable * (STDMETHODCALLTYPE *AsShader)(
+        ID3D10EffectRasterizerVariable *This);
+
+    ID3D10EffectBlendVariable * (STDMETHODCALLTYPE *AsBlend)(
+        ID3D10EffectRasterizerVariable *This);
+
+    ID3D10EffectDepthStencilVariable * (STDMETHODCALLTYPE *AsDepthStencil)(
+        ID3D10EffectRasterizerVariable *This);
+
+    ID3D10EffectRasterizerVariable * (STDMETHODCALLTYPE *AsRasterizer)(
+        ID3D10EffectRasterizerVariable *This);
+
+    ID3D10EffectSamplerVariable * (STDMETHODCALLTYPE *AsSampler)(
+        ID3D10EffectRasterizerVariable *This);
+
+    HRESULT (STDMETHODCALLTYPE *SetRawValue)(
+        ID3D10EffectRasterizerVariable *This,
+        void *data,
+        UINT offset,
+        UINT count);
+
+    HRESULT (STDMETHODCALLTYPE *GetRawValue)(
+        ID3D10EffectRasterizerVariable *This,
+        void *data,
+        UINT offset,
+        UINT count);
+
+    /*** ID3D10EffectRasterizerVariable methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetRasterizerState)(
+        ID3D10EffectRasterizerVariable *This,
+        UINT index,
+        ID3D10RasterizerState **rasterizer_state);
+
+    HRESULT (STDMETHODCALLTYPE *GetBackingStore)(
+        ID3D10EffectRasterizerVariable *This,
+        UINT index,
+        D3D10_RASTERIZER_DESC *desc);
+
+    END_INTERFACE
+} ID3D10EffectRasterizerVariableVtbl;
+
+interface ID3D10EffectRasterizerVariable {
+    CONST_VTBL ID3D10EffectRasterizerVariableVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** ID3D10EffectVariable methods ***/
+#define ID3D10EffectRasterizerVariable_IsValid(This) (This)->lpVtbl->IsValid(This)
+#define ID3D10EffectRasterizerVariable_GetType(This) (This)->lpVtbl->GetType(This)
+#define ID3D10EffectRasterizerVariable_GetDesc(This,desc) (This)->lpVtbl->GetDesc(This,desc)
+#define ID3D10EffectRasterizerVariable_GetAnnotationByIndex(This,index) (This)->lpVtbl->GetAnnotationByIndex(This,index)
+#define ID3D10EffectRasterizerVariable_GetAnnotationByName(This,name) (This)->lpVtbl->GetAnnotationByName(This,name)
+#define ID3D10EffectRasterizerVariable_GetMemberByIndex(This,index) (This)->lpVtbl->GetMemberByIndex(This,index)
+#define ID3D10EffectRasterizerVariable_GetMemberByName(This,name) (This)->lpVtbl->GetMemberByName(This,name)
+#define ID3D10EffectRasterizerVariable_GetMemberBySemantic(This,semantic) (This)->lpVtbl->GetMemberBySemantic(This,semantic)
+#define ID3D10EffectRasterizerVariable_GetElement(This,index) (This)->lpVtbl->GetElement(This,index)
+#define ID3D10EffectRasterizerVariable_GetParentConstantBuffer(This) (This)->lpVtbl->GetParentConstantBuffer(This)
+#define ID3D10EffectRasterizerVariable_AsScalar(This) (This)->lpVtbl->AsScalar(This)
+#define ID3D10EffectRasterizerVariable_AsVector(This) (This)->lpVtbl->AsVector(This)
+#define ID3D10EffectRasterizerVariable_AsMatrix(This) (This)->lpVtbl->AsMatrix(This)
+#define ID3D10EffectRasterizerVariable_AsString(This) (This)->lpVtbl->AsString(This)
+#define ID3D10EffectRasterizerVariable_AsShaderResource(This) (This)->lpVtbl->AsShaderResource(This)
+#define ID3D10EffectRasterizerVariable_AsRenderTargetView(This) (This)->lpVtbl->AsRenderTargetView(This)
+#define ID3D10EffectRasterizerVariable_AsDepthStencilView(This) (This)->lpVtbl->AsDepthStencilView(This)
+#define ID3D10EffectRasterizerVariable_AsConstantBuffer(This) (This)->lpVtbl->AsConstantBuffer(This)
+#define ID3D10EffectRasterizerVariable_AsShader(This) (This)->lpVtbl->AsShader(This)
+#define ID3D10EffectRasterizerVariable_AsBlend(This) (This)->lpVtbl->AsBlend(This)
+#define ID3D10EffectRasterizerVariable_AsDepthStencil(This) (This)->lpVtbl->AsDepthStencil(This)
+#define ID3D10EffectRasterizerVariable_AsRasterizer(This) (This)->lpVtbl->AsRasterizer(This)
+#define ID3D10EffectRasterizerVariable_AsSampler(This) (This)->lpVtbl->AsSampler(This)
+#define ID3D10EffectRasterizerVariable_SetRawValue(This,data,offset,count) (This)->lpVtbl->SetRawValue(This,data,offset,count)
+#define ID3D10EffectRasterizerVariable_GetRawValue(This,data,offset,count) (This)->lpVtbl->GetRawValue(This,data,offset,count)
+/*** ID3D10EffectRasterizerVariable methods ***/
+#define ID3D10EffectRasterizerVariable_GetRasterizerState(This,index,rasterizer_state) (This)->lpVtbl->GetRasterizerState(This,index,rasterizer_state)
+#define ID3D10EffectRasterizerVariable_GetBackingStore(This,index,desc) (This)->lpVtbl->GetBackingStore(This,index,desc)
+#else
+/*** ID3D10EffectVariable methods ***/
+static __WIDL_INLINE WINBOOL ID3D10EffectRasterizerVariable_IsValid(ID3D10EffectRasterizerVariable* This) {
+    return This->lpVtbl->IsValid(This);
+}
+static __WIDL_INLINE ID3D10EffectType * ID3D10EffectRasterizerVariable_GetType(ID3D10EffectRasterizerVariable* This) {
+    return This->lpVtbl->GetType(This);
+}
+static __WIDL_INLINE HRESULT ID3D10EffectRasterizerVariable_GetDesc(ID3D10EffectRasterizerVariable* This,D3D10_EFFECT_VARIABLE_DESC *desc) {
+    return This->lpVtbl->GetDesc(This,desc);
+}
+static __WIDL_INLINE ID3D10EffectVariable * ID3D10EffectRasterizerVariable_GetAnnotationByIndex(ID3D10EffectRasterizerVariable* This,UINT index) {
+    return This->lpVtbl->GetAnnotationByIndex(This,index);
+}
+static __WIDL_INLINE ID3D10EffectVariable * ID3D10EffectRasterizerVariable_GetAnnotationByName(ID3D10EffectRasterizerVariable* This,const char *name) {
+    return This->lpVtbl->GetAnnotationByName(This,name);
+}
+static __WIDL_INLINE ID3D10EffectVariable * ID3D10EffectRasterizerVariable_GetMemberByIndex(ID3D10EffectRasterizerVariable* This,UINT index) {
+    return This->lpVtbl->GetMemberByIndex(This,index);
+}
+static __WIDL_INLINE ID3D10EffectVariable * ID3D10EffectRasterizerVariable_GetMemberByName(ID3D10EffectRasterizerVariable* This,const char *name) {
+    return This->lpVtbl->GetMemberByName(This,name);
+}
+static __WIDL_INLINE ID3D10EffectVariable * ID3D10EffectRasterizerVariable_GetMemberBySemantic(ID3D10EffectRasterizerVariable* This,const char *semantic) {
+    return This->lpVtbl->GetMemberBySemantic(This,semantic);
+}
+static __WIDL_INLINE ID3D10EffectVariable * ID3D10EffectRasterizerVariable_GetElement(ID3D10EffectRasterizerVariable* This,UINT index) {
+    return This->lpVtbl->GetElement(This,index);
+}
+static __WIDL_INLINE ID3D10EffectConstantBuffer * ID3D10EffectRasterizerVariable_GetParentConstantBuffer(ID3D10EffectRasterizerVariable* This) {
+    return This->lpVtbl->GetParentConstantBuffer(This);
+}
+static __WIDL_INLINE ID3D10EffectScalarVariable * ID3D10EffectRasterizerVariable_AsScalar(ID3D10EffectRasterizerVariable* This) {
+    return This->lpVtbl->AsScalar(This);
+}
+static __WIDL_INLINE ID3D10EffectVectorVariable * ID3D10EffectRasterizerVariable_AsVector(ID3D10EffectRasterizerVariable* This) {
+    return This->lpVtbl->AsVector(This);
+}
+static __WIDL_INLINE ID3D10EffectMatrixVariable * ID3D10EffectRasterizerVariable_AsMatrix(ID3D10EffectRasterizerVariable* This) {
+    return This->lpVtbl->AsMatrix(This);
+}
+static __WIDL_INLINE ID3D10EffectStringVariable * ID3D10EffectRasterizerVariable_AsString(ID3D10EffectRasterizerVariable* This) {
+    return This->lpVtbl->AsString(This);
+}
+static __WIDL_INLINE ID3D10EffectShaderResourceVariable * ID3D10EffectRasterizerVariable_AsShaderResource(ID3D10EffectRasterizerVariable* This) {
+    return This->lpVtbl->AsShaderResource(This);
+}
+static __WIDL_INLINE ID3D10EffectRenderTargetViewVariable * ID3D10EffectRasterizerVariable_AsRenderTargetView(ID3D10EffectRasterizerVariable* This) {
+    return This->lpVtbl->AsRenderTargetView(This);
+}
+static __WIDL_INLINE ID3D10EffectDepthStencilViewVariable * ID3D10EffectRasterizerVariable_AsDepthStencilView(ID3D10EffectRasterizerVariable* This) {
+    return This->lpVtbl->AsDepthStencilView(This);
+}
+static __WIDL_INLINE ID3D10EffectConstantBuffer * ID3D10EffectRasterizerVariable_AsConstantBuffer(ID3D10EffectRasterizerVariable* This) {
+    return This->lpVtbl->AsConstantBuffer(This);
+}
+static __WIDL_INLINE ID3D10EffectShaderVariable * ID3D10EffectRasterizerVariable_AsShader(ID3D10EffectRasterizerVariable* This) {
+    return This->lpVtbl->AsShader(This);
+}
+static __WIDL_INLINE ID3D10EffectBlendVariable * ID3D10EffectRasterizerVariable_AsBlend(ID3D10EffectRasterizerVariable* This) {
+    return This->lpVtbl->AsBlend(This);
+}
+static __WIDL_INLINE ID3D10EffectDepthStencilVariable * ID3D10EffectRasterizerVariable_AsDepthStencil(ID3D10EffectRasterizerVariable* This) {
+    return This->lpVtbl->AsDepthStencil(This);
+}
+static __WIDL_INLINE ID3D10EffectRasterizerVariable * ID3D10EffectRasterizerVariable_AsRasterizer(ID3D10EffectRasterizerVariable* This) {
+    return This->lpVtbl->AsRasterizer(This);
+}
+static __WIDL_INLINE ID3D10EffectSamplerVariable * ID3D10EffectRasterizerVariable_AsSampler(ID3D10EffectRasterizerVariable* This) {
+    return This->lpVtbl->AsSampler(This);
+}
+static __WIDL_INLINE HRESULT ID3D10EffectRasterizerVariable_SetRawValue(ID3D10EffectRasterizerVariable* This,void *data,UINT offset,UINT count) {
+    return This->lpVtbl->SetRawValue(This,data,offset,count);
+}
+static __WIDL_INLINE HRESULT ID3D10EffectRasterizerVariable_GetRawValue(ID3D10EffectRasterizerVariable* This,void *data,UINT offset,UINT count) {
+    return This->lpVtbl->GetRawValue(This,data,offset,count);
+}
+/*** ID3D10EffectRasterizerVariable methods ***/
+static __WIDL_INLINE HRESULT ID3D10EffectRasterizerVariable_GetRasterizerState(ID3D10EffectRasterizerVariable* This,UINT index,ID3D10RasterizerState **rasterizer_state) {
+    return This->lpVtbl->GetRasterizerState(This,index,rasterizer_state);
+}
+static __WIDL_INLINE HRESULT ID3D10EffectRasterizerVariable_GetBackingStore(ID3D10EffectRasterizerVariable* This,UINT index,D3D10_RASTERIZER_DESC *desc) {
+    return This->lpVtbl->GetBackingStore(This,index,desc);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __ID3D10EffectRasterizerVariable_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * ID3D10EffectSamplerVariable interface
+ */
+#ifndef __ID3D10EffectSamplerVariable_INTERFACE_DEFINED__
+#define __ID3D10EffectSamplerVariable_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_ID3D10EffectSamplerVariable, 0x6530d5c7, 0x07e9, 0x4271, 0xa4,0x18, 0xe7,0xce,0x4b,0xd1,0xe4,0x80);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("6530d5c7-07e9-4271-a418-e7ce4bd1e480")
+ID3D10EffectSamplerVariable : public ID3D10EffectVariable
+{
+    virtual HRESULT STDMETHODCALLTYPE GetSampler(
+        UINT index,
+        ID3D10SamplerState **sampler) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetBackingStore(
+        UINT index,
+        D3D10_SAMPLER_DESC *desc) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(ID3D10EffectSamplerVariable, 0x6530d5c7, 0x07e9, 0x4271, 0xa4,0x18, 0xe7,0xce,0x4b,0xd1,0xe4,0x80)
+#endif
+#else
+typedef struct ID3D10EffectSamplerVariableVtbl {
+    BEGIN_INTERFACE
+
+    /*** ID3D10EffectVariable methods ***/
+    WINBOOL (STDMETHODCALLTYPE *IsValid)(
+        ID3D10EffectSamplerVariable *This);
+
+    ID3D10EffectType * (STDMETHODCALLTYPE *GetType)(
+        ID3D10EffectSamplerVariable *This);
+
+    HRESULT (STDMETHODCALLTYPE *GetDesc)(
+        ID3D10EffectSamplerVariable *This,
+        D3D10_EFFECT_VARIABLE_DESC *desc);
+
+    ID3D10EffectVariable * (STDMETHODCALLTYPE *GetAnnotationByIndex)(
+        ID3D10EffectSamplerVariable *This,
+        UINT index);
+
+    ID3D10EffectVariable * (STDMETHODCALLTYPE *GetAnnotationByName)(
+        ID3D10EffectSamplerVariable *This,
+        const char *name);
+
+    ID3D10EffectVariable * (STDMETHODCALLTYPE *GetMemberByIndex)(
+        ID3D10EffectSamplerVariable *This,
+        UINT index);
+
+    ID3D10EffectVariable * (STDMETHODCALLTYPE *GetMemberByName)(
+        ID3D10EffectSamplerVariable *This,
+        const char *name);
+
+    ID3D10EffectVariable * (STDMETHODCALLTYPE *GetMemberBySemantic)(
+        ID3D10EffectSamplerVariable *This,
+        const char *semantic);
+
+    ID3D10EffectVariable * (STDMETHODCALLTYPE *GetElement)(
+        ID3D10EffectSamplerVariable *This,
+        UINT index);
+
+    ID3D10EffectConstantBuffer * (STDMETHODCALLTYPE *GetParentConstantBuffer)(
+        ID3D10EffectSamplerVariable *This);
+
+    ID3D10EffectScalarVariable * (STDMETHODCALLTYPE *AsScalar)(
+        ID3D10EffectSamplerVariable *This);
+
+    ID3D10EffectVectorVariable * (STDMETHODCALLTYPE *AsVector)(
+        ID3D10EffectSamplerVariable *This);
+
+    ID3D10EffectMatrixVariable * (STDMETHODCALLTYPE *AsMatrix)(
+        ID3D10EffectSamplerVariable *This);
+
+    ID3D10EffectStringVariable * (STDMETHODCALLTYPE *AsString)(
+        ID3D10EffectSamplerVariable *This);
+
+    ID3D10EffectShaderResourceVariable * (STDMETHODCALLTYPE *AsShaderResource)(
+        ID3D10EffectSamplerVariable *This);
+
+    ID3D10EffectRenderTargetViewVariable * (STDMETHODCALLTYPE *AsRenderTargetView)(
+        ID3D10EffectSamplerVariable *This);
+
+    ID3D10EffectDepthStencilViewVariable * (STDMETHODCALLTYPE *AsDepthStencilView)(
+        ID3D10EffectSamplerVariable *This);
+
+    ID3D10EffectConstantBuffer * (STDMETHODCALLTYPE *AsConstantBuffer)(
+        ID3D10EffectSamplerVariable *This);
+
+    ID3D10EffectShaderVariable * (STDMETHODCALLTYPE *AsShader)(
+        ID3D10EffectSamplerVariable *This);
+
+    ID3D10EffectBlendVariable * (STDMETHODCALLTYPE *AsBlend)(
+        ID3D10EffectSamplerVariable *This);
+
+    ID3D10EffectDepthStencilVariable * (STDMETHODCALLTYPE *AsDepthStencil)(
+        ID3D10EffectSamplerVariable *This);
+
+    ID3D10EffectRasterizerVariable * (STDMETHODCALLTYPE *AsRasterizer)(
+        ID3D10EffectSamplerVariable *This);
+
+    ID3D10EffectSamplerVariable * (STDMETHODCALLTYPE *AsSampler)(
+        ID3D10EffectSamplerVariable *This);
+
+    HRESULT (STDMETHODCALLTYPE *SetRawValue)(
+        ID3D10EffectSamplerVariable *This,
+        void *data,
+        UINT offset,
+        UINT count);
+
+    HRESULT (STDMETHODCALLTYPE *GetRawValue)(
+        ID3D10EffectSamplerVariable *This,
+        void *data,
+        UINT offset,
+        UINT count);
+
+    /*** ID3D10EffectSamplerVariable methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetSampler)(
+        ID3D10EffectSamplerVariable *This,
+        UINT index,
+        ID3D10SamplerState **sampler);
+
+    HRESULT (STDMETHODCALLTYPE *GetBackingStore)(
+        ID3D10EffectSamplerVariable *This,
+        UINT index,
+        D3D10_SAMPLER_DESC *desc);
+
+    END_INTERFACE
+} ID3D10EffectSamplerVariableVtbl;
+
+interface ID3D10EffectSamplerVariable {
+    CONST_VTBL ID3D10EffectSamplerVariableVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** ID3D10EffectVariable methods ***/
+#define ID3D10EffectSamplerVariable_IsValid(This) (This)->lpVtbl->IsValid(This)
+#define ID3D10EffectSamplerVariable_GetType(This) (This)->lpVtbl->GetType(This)
+#define ID3D10EffectSamplerVariable_GetDesc(This,desc) (This)->lpVtbl->GetDesc(This,desc)
+#define ID3D10EffectSamplerVariable_GetAnnotationByIndex(This,index) (This)->lpVtbl->GetAnnotationByIndex(This,index)
+#define ID3D10EffectSamplerVariable_GetAnnotationByName(This,name) (This)->lpVtbl->GetAnnotationByName(This,name)
+#define ID3D10EffectSamplerVariable_GetMemberByIndex(This,index) (This)->lpVtbl->GetMemberByIndex(This,index)
+#define ID3D10EffectSamplerVariable_GetMemberByName(This,name) (This)->lpVtbl->GetMemberByName(This,name)
+#define ID3D10EffectSamplerVariable_GetMemberBySemantic(This,semantic) (This)->lpVtbl->GetMemberBySemantic(This,semantic)
+#define ID3D10EffectSamplerVariable_GetElement(This,index) (This)->lpVtbl->GetElement(This,index)
+#define ID3D10EffectSamplerVariable_GetParentConstantBuffer(This) (This)->lpVtbl->GetParentConstantBuffer(This)
+#define ID3D10EffectSamplerVariable_AsScalar(This) (This)->lpVtbl->AsScalar(This)
+#define ID3D10EffectSamplerVariable_AsVector(This) (This)->lpVtbl->AsVector(This)
+#define ID3D10EffectSamplerVariable_AsMatrix(This) (This)->lpVtbl->AsMatrix(This)
+#define ID3D10EffectSamplerVariable_AsString(This) (This)->lpVtbl->AsString(This)
+#define ID3D10EffectSamplerVariable_AsShaderResource(This) (This)->lpVtbl->AsShaderResource(This)
+#define ID3D10EffectSamplerVariable_AsRenderTargetView(This) (This)->lpVtbl->AsRenderTargetView(This)
+#define ID3D10EffectSamplerVariable_AsDepthStencilView(This) (This)->lpVtbl->AsDepthStencilView(This)
+#define ID3D10EffectSamplerVariable_AsConstantBuffer(This) (This)->lpVtbl->AsConstantBuffer(This)
+#define ID3D10EffectSamplerVariable_AsShader(This) (This)->lpVtbl->AsShader(This)
+#define ID3D10EffectSamplerVariable_AsBlend(This) (This)->lpVtbl->AsBlend(This)
+#define ID3D10EffectSamplerVariable_AsDepthStencil(This) (This)->lpVtbl->AsDepthStencil(This)
+#define ID3D10EffectSamplerVariable_AsRasterizer(This) (This)->lpVtbl->AsRasterizer(This)
+#define ID3D10EffectSamplerVariable_AsSampler(This) (This)->lpVtbl->AsSampler(This)
+#define ID3D10EffectSamplerVariable_SetRawValue(This,data,offset,count) (This)->lpVtbl->SetRawValue(This,data,offset,count)
+#define ID3D10EffectSamplerVariable_GetRawValue(This,data,offset,count) (This)->lpVtbl->GetRawValue(This,data,offset,count)
+/*** ID3D10EffectSamplerVariable methods ***/
+#define ID3D10EffectSamplerVariable_GetSampler(This,index,sampler) (This)->lpVtbl->GetSampler(This,index,sampler)
+#define ID3D10EffectSamplerVariable_GetBackingStore(This,index,desc) (This)->lpVtbl->GetBackingStore(This,index,desc)
+#else
+/*** ID3D10EffectVariable methods ***/
+static __WIDL_INLINE WINBOOL ID3D10EffectSamplerVariable_IsValid(ID3D10EffectSamplerVariable* This) {
+    return This->lpVtbl->IsValid(This);
+}
+static __WIDL_INLINE ID3D10EffectType * ID3D10EffectSamplerVariable_GetType(ID3D10EffectSamplerVariable* This) {
+    return This->lpVtbl->GetType(This);
+}
+static __WIDL_INLINE HRESULT ID3D10EffectSamplerVariable_GetDesc(ID3D10EffectSamplerVariable* This,D3D10_EFFECT_VARIABLE_DESC *desc) {
+    return This->lpVtbl->GetDesc(This,desc);
+}
+static __WIDL_INLINE ID3D10EffectVariable * ID3D10EffectSamplerVariable_GetAnnotationByIndex(ID3D10EffectSamplerVariable* This,UINT index) {
+    return This->lpVtbl->GetAnnotationByIndex(This,index);
+}
+static __WIDL_INLINE ID3D10EffectVariable * ID3D10EffectSamplerVariable_GetAnnotationByName(ID3D10EffectSamplerVariable* This,const char *name) {
+    return This->lpVtbl->GetAnnotationByName(This,name);
+}
+static __WIDL_INLINE ID3D10EffectVariable * ID3D10EffectSamplerVariable_GetMemberByIndex(ID3D10EffectSamplerVariable* This,UINT index) {
+    return This->lpVtbl->GetMemberByIndex(This,index);
+}
+static __WIDL_INLINE ID3D10EffectVariable * ID3D10EffectSamplerVariable_GetMemberByName(ID3D10EffectSamplerVariable* This,const char *name) {
+    return This->lpVtbl->GetMemberByName(This,name);
+}
+static __WIDL_INLINE ID3D10EffectVariable * ID3D10EffectSamplerVariable_GetMemberBySemantic(ID3D10EffectSamplerVariable* This,const char *semantic) {
+    return This->lpVtbl->GetMemberBySemantic(This,semantic);
+}
+static __WIDL_INLINE ID3D10EffectVariable * ID3D10EffectSamplerVariable_GetElement(ID3D10EffectSamplerVariable* This,UINT index) {
+    return This->lpVtbl->GetElement(This,index);
+}
+static __WIDL_INLINE ID3D10EffectConstantBuffer * ID3D10EffectSamplerVariable_GetParentConstantBuffer(ID3D10EffectSamplerVariable* This) {
+    return This->lpVtbl->GetParentConstantBuffer(This);
+}
+static __WIDL_INLINE ID3D10EffectScalarVariable * ID3D10EffectSamplerVariable_AsScalar(ID3D10EffectSamplerVariable* This) {
+    return This->lpVtbl->AsScalar(This);
+}
+static __WIDL_INLINE ID3D10EffectVectorVariable * ID3D10EffectSamplerVariable_AsVector(ID3D10EffectSamplerVariable* This) {
+    return This->lpVtbl->AsVector(This);
+}
+static __WIDL_INLINE ID3D10EffectMatrixVariable * ID3D10EffectSamplerVariable_AsMatrix(ID3D10EffectSamplerVariable* This) {
+    return This->lpVtbl->AsMatrix(This);
+}
+static __WIDL_INLINE ID3D10EffectStringVariable * ID3D10EffectSamplerVariable_AsString(ID3D10EffectSamplerVariable* This) {
+    return This->lpVtbl->AsString(This);
+}
+static __WIDL_INLINE ID3D10EffectShaderResourceVariable * ID3D10EffectSamplerVariable_AsShaderResource(ID3D10EffectSamplerVariable* This) {
+    return This->lpVtbl->AsShaderResource(This);
+}
+static __WIDL_INLINE ID3D10EffectRenderTargetViewVariable * ID3D10EffectSamplerVariable_AsRenderTargetView(ID3D10EffectSamplerVariable* This) {
+    return This->lpVtbl->AsRenderTargetView(This);
+}
+static __WIDL_INLINE ID3D10EffectDepthStencilViewVariable * ID3D10EffectSamplerVariable_AsDepthStencilView(ID3D10EffectSamplerVariable* This) {
+    return This->lpVtbl->AsDepthStencilView(This);
+}
+static __WIDL_INLINE ID3D10EffectConstantBuffer * ID3D10EffectSamplerVariable_AsConstantBuffer(ID3D10EffectSamplerVariable* This) {
+    return This->lpVtbl->AsConstantBuffer(This);
+}
+static __WIDL_INLINE ID3D10EffectShaderVariable * ID3D10EffectSamplerVariable_AsShader(ID3D10EffectSamplerVariable* This) {
+    return This->lpVtbl->AsShader(This);
+}
+static __WIDL_INLINE ID3D10EffectBlendVariable * ID3D10EffectSamplerVariable_AsBlend(ID3D10EffectSamplerVariable* This) {
+    return This->lpVtbl->AsBlend(This);
+}
+static __WIDL_INLINE ID3D10EffectDepthStencilVariable * ID3D10EffectSamplerVariable_AsDepthStencil(ID3D10EffectSamplerVariable* This) {
+    return This->lpVtbl->AsDepthStencil(This);
+}
+static __WIDL_INLINE ID3D10EffectRasterizerVariable * ID3D10EffectSamplerVariable_AsRasterizer(ID3D10EffectSamplerVariable* This) {
+    return This->lpVtbl->AsRasterizer(This);
+}
+static __WIDL_INLINE ID3D10EffectSamplerVariable * ID3D10EffectSamplerVariable_AsSampler(ID3D10EffectSamplerVariable* This) {
+    return This->lpVtbl->AsSampler(This);
+}
+static __WIDL_INLINE HRESULT ID3D10EffectSamplerVariable_SetRawValue(ID3D10EffectSamplerVariable* This,void *data,UINT offset,UINT count) {
+    return This->lpVtbl->SetRawValue(This,data,offset,count);
+}
+static __WIDL_INLINE HRESULT ID3D10EffectSamplerVariable_GetRawValue(ID3D10EffectSamplerVariable* This,void *data,UINT offset,UINT count) {
+    return This->lpVtbl->GetRawValue(This,data,offset,count);
+}
+/*** ID3D10EffectSamplerVariable methods ***/
+static __WIDL_INLINE HRESULT ID3D10EffectSamplerVariable_GetSampler(ID3D10EffectSamplerVariable* This,UINT index,ID3D10SamplerState **sampler) {
+    return This->lpVtbl->GetSampler(This,index,sampler);
+}
+static __WIDL_INLINE HRESULT ID3D10EffectSamplerVariable_GetBackingStore(ID3D10EffectSamplerVariable* This,UINT index,D3D10_SAMPLER_DESC *desc) {
+    return This->lpVtbl->GetBackingStore(This,index,desc);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __ID3D10EffectSamplerVariable_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * ID3D10EffectTechnique interface
+ */
+#ifndef __ID3D10EffectTechnique_INTERFACE_DEFINED__
+#define __ID3D10EffectTechnique_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_ID3D10EffectTechnique, 0xdb122ce8, 0xd1c9, 0x4292, 0xb2,0x37, 0x24,0xed,0x3d,0xe8,0xb1,0x75);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("db122ce8-d1c9-4292-b237-24ed3de8b175")
+ID3D10EffectTechnique
+{
+
+    BEGIN_INTERFACE
+
+    virtual WINBOOL STDMETHODCALLTYPE IsValid(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetDesc(
+        D3D10_TECHNIQUE_DESC *desc) = 0;
+
+    virtual ID3D10EffectVariable * STDMETHODCALLTYPE GetAnnotationByIndex(
+        UINT index) = 0;
+
+    virtual ID3D10EffectVariable * STDMETHODCALLTYPE GetAnnotationByName(
+        const char *name) = 0;
+
+    virtual ID3D10EffectPass * STDMETHODCALLTYPE GetPassByIndex(
+        UINT index) = 0;
+
+    virtual ID3D10EffectPass * STDMETHODCALLTYPE GetPassByName(
+        const char *name) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE ComputeStateBlockMask(
+        D3D10_STATE_BLOCK_MASK *mask) = 0;
+
+    END_INTERFACE
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(ID3D10EffectTechnique, 0xdb122ce8, 0xd1c9, 0x4292, 0xb2,0x37, 0x24,0xed,0x3d,0xe8,0xb1,0x75)
+#endif
+#else
+typedef struct ID3D10EffectTechniqueVtbl {
+    BEGIN_INTERFACE
+
+    /*** ID3D10EffectTechnique methods ***/
+    WINBOOL (STDMETHODCALLTYPE *IsValid)(
+        ID3D10EffectTechnique *This);
+
+    HRESULT (STDMETHODCALLTYPE *GetDesc)(
+        ID3D10EffectTechnique *This,
+        D3D10_TECHNIQUE_DESC *desc);
+
+    ID3D10EffectVariable * (STDMETHODCALLTYPE *GetAnnotationByIndex)(
+        ID3D10EffectTechnique *This,
+        UINT index);
+
+    ID3D10EffectVariable * (STDMETHODCALLTYPE *GetAnnotationByName)(
+        ID3D10EffectTechnique *This,
+        const char *name);
+
+    ID3D10EffectPass * (STDMETHODCALLTYPE *GetPassByIndex)(
+        ID3D10EffectTechnique *This,
+        UINT index);
+
+    ID3D10EffectPass * (STDMETHODCALLTYPE *GetPassByName)(
+        ID3D10EffectTechnique *This,
+        const char *name);
+
+    HRESULT (STDMETHODCALLTYPE *ComputeStateBlockMask)(
+        ID3D10EffectTechnique *This,
+        D3D10_STATE_BLOCK_MASK *mask);
+
+    END_INTERFACE
+} ID3D10EffectTechniqueVtbl;
+
+interface ID3D10EffectTechnique {
+    CONST_VTBL ID3D10EffectTechniqueVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** ID3D10EffectTechnique methods ***/
+#define ID3D10EffectTechnique_IsValid(This) (This)->lpVtbl->IsValid(This)
+#define ID3D10EffectTechnique_GetDesc(This,desc) (This)->lpVtbl->GetDesc(This,desc)
+#define ID3D10EffectTechnique_GetAnnotationByIndex(This,index) (This)->lpVtbl->GetAnnotationByIndex(This,index)
+#define ID3D10EffectTechnique_GetAnnotationByName(This,name) (This)->lpVtbl->GetAnnotationByName(This,name)
+#define ID3D10EffectTechnique_GetPassByIndex(This,index) (This)->lpVtbl->GetPassByIndex(This,index)
+#define ID3D10EffectTechnique_GetPassByName(This,name) (This)->lpVtbl->GetPassByName(This,name)
+#define ID3D10EffectTechnique_ComputeStateBlockMask(This,mask) (This)->lpVtbl->ComputeStateBlockMask(This,mask)
+#else
+/*** ID3D10EffectTechnique methods ***/
+static __WIDL_INLINE WINBOOL ID3D10EffectTechnique_IsValid(ID3D10EffectTechnique* This) {
+    return This->lpVtbl->IsValid(This);
+}
+static __WIDL_INLINE HRESULT ID3D10EffectTechnique_GetDesc(ID3D10EffectTechnique* This,D3D10_TECHNIQUE_DESC *desc) {
+    return This->lpVtbl->GetDesc(This,desc);
+}
+static __WIDL_INLINE ID3D10EffectVariable * ID3D10EffectTechnique_GetAnnotationByIndex(ID3D10EffectTechnique* This,UINT index) {
+    return This->lpVtbl->GetAnnotationByIndex(This,index);
+}
+static __WIDL_INLINE ID3D10EffectVariable * ID3D10EffectTechnique_GetAnnotationByName(ID3D10EffectTechnique* This,const char *name) {
+    return This->lpVtbl->GetAnnotationByName(This,name);
+}
+static __WIDL_INLINE ID3D10EffectPass * ID3D10EffectTechnique_GetPassByIndex(ID3D10EffectTechnique* This,UINT index) {
+    return This->lpVtbl->GetPassByIndex(This,index);
+}
+static __WIDL_INLINE ID3D10EffectPass * ID3D10EffectTechnique_GetPassByName(ID3D10EffectTechnique* This,const char *name) {
+    return This->lpVtbl->GetPassByName(This,name);
+}
+static __WIDL_INLINE HRESULT ID3D10EffectTechnique_ComputeStateBlockMask(ID3D10EffectTechnique* This,D3D10_STATE_BLOCK_MASK *mask) {
+    return This->lpVtbl->ComputeStateBlockMask(This,mask);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __ID3D10EffectTechnique_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * ID3D10Effect interface
+ */
+#ifndef __ID3D10Effect_INTERFACE_DEFINED__
+#define __ID3D10Effect_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_ID3D10Effect, 0x51b0ca8b, 0xec0b, 0x4519, 0x87,0x0d, 0x8e,0xe1,0xcb,0x50,0x17,0xc7);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("51b0ca8b-ec0b-4519-870d-8ee1cb5017c7")
+ID3D10Effect : public IUnknown
+{
+    virtual WINBOOL STDMETHODCALLTYPE IsValid(
+        ) = 0;
+
+    virtual WINBOOL STDMETHODCALLTYPE IsPool(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetDevice(
+        ID3D10Device **device) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetDesc(
+        D3D10_EFFECT_DESC *desc) = 0;
+
+    virtual ID3D10EffectConstantBuffer * STDMETHODCALLTYPE GetConstantBufferByIndex(
+        UINT index) = 0;
+
+    virtual ID3D10EffectConstantBuffer * STDMETHODCALLTYPE GetConstantBufferByName(
+        const char *name) = 0;
+
+    virtual ID3D10EffectVariable * STDMETHODCALLTYPE GetVariableByIndex(
+        UINT index) = 0;
+
+    virtual ID3D10EffectVariable * STDMETHODCALLTYPE GetVariableByName(
+        const char *name) = 0;
+
+    virtual ID3D10EffectVariable * STDMETHODCALLTYPE GetVariableBySemantic(
+        const char *semantic) = 0;
+
+    virtual ID3D10EffectTechnique * STDMETHODCALLTYPE GetTechniqueByIndex(
+        UINT index) = 0;
+
+    virtual ID3D10EffectTechnique * STDMETHODCALLTYPE GetTechniqueByName(
+        const char *name) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Optimize(
+        ) = 0;
+
+    virtual WINBOOL STDMETHODCALLTYPE IsOptimized(
+        ) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(ID3D10Effect, 0x51b0ca8b, 0xec0b, 0x4519, 0x87,0x0d, 0x8e,0xe1,0xcb,0x50,0x17,0xc7)
+#endif
+#else
+typedef struct ID3D10EffectVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        ID3D10Effect *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        ID3D10Effect *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        ID3D10Effect *This);
+
+    /*** ID3D10Effect methods ***/
+    WINBOOL (STDMETHODCALLTYPE *IsValid)(
+        ID3D10Effect *This);
+
+    WINBOOL (STDMETHODCALLTYPE *IsPool)(
+        ID3D10Effect *This);
+
+    HRESULT (STDMETHODCALLTYPE *GetDevice)(
+        ID3D10Effect *This,
+        ID3D10Device **device);
+
+    HRESULT (STDMETHODCALLTYPE *GetDesc)(
+        ID3D10Effect *This,
+        D3D10_EFFECT_DESC *desc);
+
+    ID3D10EffectConstantBuffer * (STDMETHODCALLTYPE *GetConstantBufferByIndex)(
+        ID3D10Effect *This,
+        UINT index);
+
+    ID3D10EffectConstantBuffer * (STDMETHODCALLTYPE *GetConstantBufferByName)(
+        ID3D10Effect *This,
+        const char *name);
+
+    ID3D10EffectVariable * (STDMETHODCALLTYPE *GetVariableByIndex)(
+        ID3D10Effect *This,
+        UINT index);
+
+    ID3D10EffectVariable * (STDMETHODCALLTYPE *GetVariableByName)(
+        ID3D10Effect *This,
+        const char *name);
+
+    ID3D10EffectVariable * (STDMETHODCALLTYPE *GetVariableBySemantic)(
+        ID3D10Effect *This,
+        const char *semantic);
+
+    ID3D10EffectTechnique * (STDMETHODCALLTYPE *GetTechniqueByIndex)(
+        ID3D10Effect *This,
+        UINT index);
+
+    ID3D10EffectTechnique * (STDMETHODCALLTYPE *GetTechniqueByName)(
+        ID3D10Effect *This,
+        const char *name);
+
+    HRESULT (STDMETHODCALLTYPE *Optimize)(
+        ID3D10Effect *This);
+
+    WINBOOL (STDMETHODCALLTYPE *IsOptimized)(
+        ID3D10Effect *This);
+
+    END_INTERFACE
+} ID3D10EffectVtbl;
+
+interface ID3D10Effect {
+    CONST_VTBL ID3D10EffectVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define ID3D10Effect_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define ID3D10Effect_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define ID3D10Effect_Release(This) (This)->lpVtbl->Release(This)
+/*** ID3D10Effect methods ***/
+#define ID3D10Effect_IsValid(This) (This)->lpVtbl->IsValid(This)
+#define ID3D10Effect_IsPool(This) (This)->lpVtbl->IsPool(This)
+#define ID3D10Effect_GetDevice(This,device) (This)->lpVtbl->GetDevice(This,device)
+#define ID3D10Effect_GetDesc(This,desc) (This)->lpVtbl->GetDesc(This,desc)
+#define ID3D10Effect_GetConstantBufferByIndex(This,index) (This)->lpVtbl->GetConstantBufferByIndex(This,index)
+#define ID3D10Effect_GetConstantBufferByName(This,name) (This)->lpVtbl->GetConstantBufferByName(This,name)
+#define ID3D10Effect_GetVariableByIndex(This,index) (This)->lpVtbl->GetVariableByIndex(This,index)
+#define ID3D10Effect_GetVariableByName(This,name) (This)->lpVtbl->GetVariableByName(This,name)
+#define ID3D10Effect_GetVariableBySemantic(This,semantic) (This)->lpVtbl->GetVariableBySemantic(This,semantic)
+#define ID3D10Effect_GetTechniqueByIndex(This,index) (This)->lpVtbl->GetTechniqueByIndex(This,index)
+#define ID3D10Effect_GetTechniqueByName(This,name) (This)->lpVtbl->GetTechniqueByName(This,name)
+#define ID3D10Effect_Optimize(This) (This)->lpVtbl->Optimize(This)
+#define ID3D10Effect_IsOptimized(This) (This)->lpVtbl->IsOptimized(This)
+#else
+/*** IUnknown methods ***/
+static __WIDL_INLINE HRESULT ID3D10Effect_QueryInterface(ID3D10Effect* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static __WIDL_INLINE ULONG ID3D10Effect_AddRef(ID3D10Effect* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static __WIDL_INLINE ULONG ID3D10Effect_Release(ID3D10Effect* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** ID3D10Effect methods ***/
+static __WIDL_INLINE WINBOOL ID3D10Effect_IsValid(ID3D10Effect* This) {
+    return This->lpVtbl->IsValid(This);
+}
+static __WIDL_INLINE WINBOOL ID3D10Effect_IsPool(ID3D10Effect* This) {
+    return This->lpVtbl->IsPool(This);
+}
+static __WIDL_INLINE HRESULT ID3D10Effect_GetDevice(ID3D10Effect* This,ID3D10Device **device) {
+    return This->lpVtbl->GetDevice(This,device);
+}
+static __WIDL_INLINE HRESULT ID3D10Effect_GetDesc(ID3D10Effect* This,D3D10_EFFECT_DESC *desc) {
+    return This->lpVtbl->GetDesc(This,desc);
+}
+static __WIDL_INLINE ID3D10EffectConstantBuffer * ID3D10Effect_GetConstantBufferByIndex(ID3D10Effect* This,UINT index) {
+    return This->lpVtbl->GetConstantBufferByIndex(This,index);
+}
+static __WIDL_INLINE ID3D10EffectConstantBuffer * ID3D10Effect_GetConstantBufferByName(ID3D10Effect* This,const char *name) {
+    return This->lpVtbl->GetConstantBufferByName(This,name);
+}
+static __WIDL_INLINE ID3D10EffectVariable * ID3D10Effect_GetVariableByIndex(ID3D10Effect* This,UINT index) {
+    return This->lpVtbl->GetVariableByIndex(This,index);
+}
+static __WIDL_INLINE ID3D10EffectVariable * ID3D10Effect_GetVariableByName(ID3D10Effect* This,const char *name) {
+    return This->lpVtbl->GetVariableByName(This,name);
+}
+static __WIDL_INLINE ID3D10EffectVariable * ID3D10Effect_GetVariableBySemantic(ID3D10Effect* This,const char *semantic) {
+    return This->lpVtbl->GetVariableBySemantic(This,semantic);
+}
+static __WIDL_INLINE ID3D10EffectTechnique * ID3D10Effect_GetTechniqueByIndex(ID3D10Effect* This,UINT index) {
+    return This->lpVtbl->GetTechniqueByIndex(This,index);
+}
+static __WIDL_INLINE ID3D10EffectTechnique * ID3D10Effect_GetTechniqueByName(ID3D10Effect* This,const char *name) {
+    return This->lpVtbl->GetTechniqueByName(This,name);
+}
+static __WIDL_INLINE HRESULT ID3D10Effect_Optimize(ID3D10Effect* This) {
+    return This->lpVtbl->Optimize(This);
+}
+static __WIDL_INLINE WINBOOL ID3D10Effect_IsOptimized(ID3D10Effect* This) {
+    return This->lpVtbl->IsOptimized(This);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __ID3D10Effect_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * ID3D10EffectPool interface
+ */
+#ifndef __ID3D10EffectPool_INTERFACE_DEFINED__
+#define __ID3D10EffectPool_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_ID3D10EffectPool, 0x9537ab04, 0x3250, 0x412e, 0x82,0x13, 0xfc,0xd2,0xf8,0x67,0x79,0x33);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("9537ab04-3250-412e-8213-fcd2f8677933")
+ID3D10EffectPool : public IUnknown
+{
+    virtual ID3D10Effect * STDMETHODCALLTYPE AsEffect(
+        ) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(ID3D10EffectPool, 0x9537ab04, 0x3250, 0x412e, 0x82,0x13, 0xfc,0xd2,0xf8,0x67,0x79,0x33)
+#endif
+#else
+typedef struct ID3D10EffectPoolVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        ID3D10EffectPool *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        ID3D10EffectPool *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        ID3D10EffectPool *This);
+
+    /*** ID3D10EffectPool methods ***/
+    ID3D10Effect * (STDMETHODCALLTYPE *AsEffect)(
+        ID3D10EffectPool *This);
+
+    END_INTERFACE
+} ID3D10EffectPoolVtbl;
+
+interface ID3D10EffectPool {
+    CONST_VTBL ID3D10EffectPoolVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define ID3D10EffectPool_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define ID3D10EffectPool_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define ID3D10EffectPool_Release(This) (This)->lpVtbl->Release(This)
+/*** ID3D10EffectPool methods ***/
+#define ID3D10EffectPool_AsEffect(This) (This)->lpVtbl->AsEffect(This)
+#else
+/*** IUnknown methods ***/
+static __WIDL_INLINE HRESULT ID3D10EffectPool_QueryInterface(ID3D10EffectPool* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static __WIDL_INLINE ULONG ID3D10EffectPool_AddRef(ID3D10EffectPool* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static __WIDL_INLINE ULONG ID3D10EffectPool_Release(ID3D10EffectPool* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** ID3D10EffectPool methods ***/
+static __WIDL_INLINE ID3D10Effect * ID3D10EffectPool_AsEffect(ID3D10EffectPool* This) {
+    return This->lpVtbl->AsEffect(This);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __ID3D10EffectPool_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * ID3D10EffectPass interface
+ */
+#ifndef __ID3D10EffectPass_INTERFACE_DEFINED__
+#define __ID3D10EffectPass_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_ID3D10EffectPass, 0x5cfbeb89, 0x1a06, 0x46e0, 0xb2,0x82, 0xe3,0xf9,0xbf,0xa3,0x6a,0x54);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("5cfbeb89-1a06-46e0-b282-e3f9bfa36a54")
+ID3D10EffectPass
+{
+
+    BEGIN_INTERFACE
+
+    virtual WINBOOL STDMETHODCALLTYPE IsValid(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetDesc(
+        D3D10_PASS_DESC *desc) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetVertexShaderDesc(
+        D3D10_PASS_SHADER_DESC *desc) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetGeometryShaderDesc(
+        D3D10_PASS_SHADER_DESC *desc) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetPixelShaderDesc(
+        D3D10_PASS_SHADER_DESC *desc) = 0;
+
+    virtual ID3D10EffectVariable * STDMETHODCALLTYPE GetAnnotationByIndex(
+        UINT index) = 0;
+
+    virtual ID3D10EffectVariable * STDMETHODCALLTYPE GetAnnotationByName(
+        const char *name) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Apply(
+        UINT flags) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE ComputeStateBlockMask(
+        D3D10_STATE_BLOCK_MASK *mask) = 0;
+
+    END_INTERFACE
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(ID3D10EffectPass, 0x5cfbeb89, 0x1a06, 0x46e0, 0xb2,0x82, 0xe3,0xf9,0xbf,0xa3,0x6a,0x54)
+#endif
+#else
+typedef struct ID3D10EffectPassVtbl {
+    BEGIN_INTERFACE
+
+    /*** ID3D10EffectPass methods ***/
+    WINBOOL (STDMETHODCALLTYPE *IsValid)(
+        ID3D10EffectPass *This);
+
+    HRESULT (STDMETHODCALLTYPE *GetDesc)(
+        ID3D10EffectPass *This,
+        D3D10_PASS_DESC *desc);
+
+    HRESULT (STDMETHODCALLTYPE *GetVertexShaderDesc)(
+        ID3D10EffectPass *This,
+        D3D10_PASS_SHADER_DESC *desc);
+
+    HRESULT (STDMETHODCALLTYPE *GetGeometryShaderDesc)(
+        ID3D10EffectPass *This,
+        D3D10_PASS_SHADER_DESC *desc);
+
+    HRESULT (STDMETHODCALLTYPE *GetPixelShaderDesc)(
+        ID3D10EffectPass *This,
+        D3D10_PASS_SHADER_DESC *desc);
+
+    ID3D10EffectVariable * (STDMETHODCALLTYPE *GetAnnotationByIndex)(
+        ID3D10EffectPass *This,
+        UINT index);
+
+    ID3D10EffectVariable * (STDMETHODCALLTYPE *GetAnnotationByName)(
+        ID3D10EffectPass *This,
+        const char *name);
+
+    HRESULT (STDMETHODCALLTYPE *Apply)(
+        ID3D10EffectPass *This,
+        UINT flags);
+
+    HRESULT (STDMETHODCALLTYPE *ComputeStateBlockMask)(
+        ID3D10EffectPass *This,
+        D3D10_STATE_BLOCK_MASK *mask);
+
+    END_INTERFACE
+} ID3D10EffectPassVtbl;
+
+interface ID3D10EffectPass {
+    CONST_VTBL ID3D10EffectPassVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** ID3D10EffectPass methods ***/
+#define ID3D10EffectPass_IsValid(This) (This)->lpVtbl->IsValid(This)
+#define ID3D10EffectPass_GetDesc(This,desc) (This)->lpVtbl->GetDesc(This,desc)
+#define ID3D10EffectPass_GetVertexShaderDesc(This,desc) (This)->lpVtbl->GetVertexShaderDesc(This,desc)
+#define ID3D10EffectPass_GetGeometryShaderDesc(This,desc) (This)->lpVtbl->GetGeometryShaderDesc(This,desc)
+#define ID3D10EffectPass_GetPixelShaderDesc(This,desc) (This)->lpVtbl->GetPixelShaderDesc(This,desc)
+#define ID3D10EffectPass_GetAnnotationByIndex(This,index) (This)->lpVtbl->GetAnnotationByIndex(This,index)
+#define ID3D10EffectPass_GetAnnotationByName(This,name) (This)->lpVtbl->GetAnnotationByName(This,name)
+#define ID3D10EffectPass_Apply(This,flags) (This)->lpVtbl->Apply(This,flags)
+#define ID3D10EffectPass_ComputeStateBlockMask(This,mask) (This)->lpVtbl->ComputeStateBlockMask(This,mask)
+#else
+/*** ID3D10EffectPass methods ***/
+static __WIDL_INLINE WINBOOL ID3D10EffectPass_IsValid(ID3D10EffectPass* This) {
+    return This->lpVtbl->IsValid(This);
+}
+static __WIDL_INLINE HRESULT ID3D10EffectPass_GetDesc(ID3D10EffectPass* This,D3D10_PASS_DESC *desc) {
+    return This->lpVtbl->GetDesc(This,desc);
+}
+static __WIDL_INLINE HRESULT ID3D10EffectPass_GetVertexShaderDesc(ID3D10EffectPass* This,D3D10_PASS_SHADER_DESC *desc) {
+    return This->lpVtbl->GetVertexShaderDesc(This,desc);
+}
+static __WIDL_INLINE HRESULT ID3D10EffectPass_GetGeometryShaderDesc(ID3D10EffectPass* This,D3D10_PASS_SHADER_DESC *desc) {
+    return This->lpVtbl->GetGeometryShaderDesc(This,desc);
+}
+static __WIDL_INLINE HRESULT ID3D10EffectPass_GetPixelShaderDesc(ID3D10EffectPass* This,D3D10_PASS_SHADER_DESC *desc) {
+    return This->lpVtbl->GetPixelShaderDesc(This,desc);
+}
+static __WIDL_INLINE ID3D10EffectVariable * ID3D10EffectPass_GetAnnotationByIndex(ID3D10EffectPass* This,UINT index) {
+    return This->lpVtbl->GetAnnotationByIndex(This,index);
+}
+static __WIDL_INLINE ID3D10EffectVariable * ID3D10EffectPass_GetAnnotationByName(ID3D10EffectPass* This,const char *name) {
+    return This->lpVtbl->GetAnnotationByName(This,name);
+}
+static __WIDL_INLINE HRESULT ID3D10EffectPass_Apply(ID3D10EffectPass* This,UINT flags) {
+    return This->lpVtbl->Apply(This,flags);
+}
+static __WIDL_INLINE HRESULT ID3D10EffectPass_ComputeStateBlockMask(ID3D10EffectPass* This,D3D10_STATE_BLOCK_MASK *mask) {
+    return This->lpVtbl->ComputeStateBlockMask(This,mask);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __ID3D10EffectPass_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * ID3D10StateBlock interface
+ */
+#ifndef __ID3D10StateBlock_INTERFACE_DEFINED__
+#define __ID3D10StateBlock_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_ID3D10StateBlock, 0x0803425a, 0x57f5, 0x4dd6, 0x94,0x65, 0xa8,0x75,0x70,0x83,0x4a,0x08);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("0803425a-57f5-4dd6-9465-a87570834a08")
+ID3D10StateBlock : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE Capture(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Apply(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE ReleaseAllDeviceObjects(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetDevice(
+        ID3D10Device **device) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(ID3D10StateBlock, 0x0803425a, 0x57f5, 0x4dd6, 0x94,0x65, 0xa8,0x75,0x70,0x83,0x4a,0x08)
+#endif
+#else
+typedef struct ID3D10StateBlockVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        ID3D10StateBlock *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        ID3D10StateBlock *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        ID3D10StateBlock *This);
+
+    /*** ID3D10StateBlock methods ***/
+    HRESULT (STDMETHODCALLTYPE *Capture)(
+        ID3D10StateBlock *This);
+
+    HRESULT (STDMETHODCALLTYPE *Apply)(
+        ID3D10StateBlock *This);
+
+    HRESULT (STDMETHODCALLTYPE *ReleaseAllDeviceObjects)(
+        ID3D10StateBlock *This);
+
+    HRESULT (STDMETHODCALLTYPE *GetDevice)(
+        ID3D10StateBlock *This,
+        ID3D10Device **device);
+
+    END_INTERFACE
+} ID3D10StateBlockVtbl;
+
+interface ID3D10StateBlock {
+    CONST_VTBL ID3D10StateBlockVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define ID3D10StateBlock_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define ID3D10StateBlock_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define ID3D10StateBlock_Release(This) (This)->lpVtbl->Release(This)
+/*** ID3D10StateBlock methods ***/
+#define ID3D10StateBlock_Capture(This) (This)->lpVtbl->Capture(This)
+#define ID3D10StateBlock_Apply(This) (This)->lpVtbl->Apply(This)
+#define ID3D10StateBlock_ReleaseAllDeviceObjects(This) (This)->lpVtbl->ReleaseAllDeviceObjects(This)
+#define ID3D10StateBlock_GetDevice(This,device) (This)->lpVtbl->GetDevice(This,device)
+#else
+/*** IUnknown methods ***/
+static __WIDL_INLINE HRESULT ID3D10StateBlock_QueryInterface(ID3D10StateBlock* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static __WIDL_INLINE ULONG ID3D10StateBlock_AddRef(ID3D10StateBlock* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static __WIDL_INLINE ULONG ID3D10StateBlock_Release(ID3D10StateBlock* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** ID3D10StateBlock methods ***/
+static __WIDL_INLINE HRESULT ID3D10StateBlock_Capture(ID3D10StateBlock* This) {
+    return This->lpVtbl->Capture(This);
+}
+static __WIDL_INLINE HRESULT ID3D10StateBlock_Apply(ID3D10StateBlock* This) {
+    return This->lpVtbl->Apply(This);
+}
+static __WIDL_INLINE HRESULT ID3D10StateBlock_ReleaseAllDeviceObjects(ID3D10StateBlock* This) {
+    return This->lpVtbl->ReleaseAllDeviceObjects(This);
+}
+static __WIDL_INLINE HRESULT ID3D10StateBlock_GetDevice(ID3D10StateBlock* This,ID3D10Device **device) {
+    return This->lpVtbl->GetDevice(This,device);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __ID3D10StateBlock_INTERFACE_DEFINED__ */
+
+HRESULT __stdcall  D3D10CompileEffectFromMemory(void *data,SIZE_T data_size,const char *filename,const D3D10_SHADER_MACRO *defines,ID3D10Include *include,UINT hlsl_flags,UINT fx_flags,ID3D10Blob **effect,ID3D10Blob **errors);
+
+HRESULT __stdcall  D3D10CreateEffectFromMemory(void *data,SIZE_T data_size,UINT flags,ID3D10Device *device,ID3D10EffectPool *effect_pool,ID3D10Effect **effect);
+
+HRESULT __stdcall  D3D10CreateEffectPoolFromMemory(void *data,SIZE_T data_size,UINT fx_flags,ID3D10Device *device,ID3D10EffectPool **effect_pool);
+
+HRESULT __stdcall  D3D10CreateStateBlock(ID3D10Device *device,D3D10_STATE_BLOCK_MASK *mask,ID3D10StateBlock **stateblock);
+
+HRESULT __stdcall  D3D10StateBlockMaskDifference(D3D10_STATE_BLOCK_MASK *mask_x,D3D10_STATE_BLOCK_MASK *mask_y,D3D10_STATE_BLOCK_MASK *result);
+
+HRESULT __stdcall  D3D10StateBlockMaskDisableAll(D3D10_STATE_BLOCK_MASK *mask);
+
+HRESULT __stdcall  D3D10StateBlockMaskDisableCapture(D3D10_STATE_BLOCK_MASK *mask,D3D10_DEVICE_STATE_TYPES state_type,UINT start_idx,UINT count);
+
+HRESULT __stdcall  D3D10StateBlockMaskEnableAll(D3D10_STATE_BLOCK_MASK *mask);
+
+HRESULT __stdcall  D3D10StateBlockMaskEnableCapture(D3D10_STATE_BLOCK_MASK *mask,D3D10_DEVICE_STATE_TYPES state_type,UINT start_idx,UINT count);
+
+WINBOOL __stdcall  D3D10StateBlockMaskGetSetting(D3D10_STATE_BLOCK_MASK *mask,D3D10_DEVICE_STATE_TYPES state_type,UINT idx);
+
+HRESULT __stdcall  D3D10StateBlockMaskIntersect(D3D10_STATE_BLOCK_MASK *mask_x,D3D10_STATE_BLOCK_MASK *mask_y,D3D10_STATE_BLOCK_MASK *result);
+
+HRESULT __stdcall  D3D10StateBlockMaskUnion(D3D10_STATE_BLOCK_MASK *mask_x,D3D10_STATE_BLOCK_MASK *mask_y,D3D10_STATE_BLOCK_MASK *result);
+
+/* Begin additional prototypes for all interfaces */
+
+
+/* End additional prototypes */
 
 #ifdef __cplusplus
 }
 #endif
 
-#endif /* __WINE_D3D10EFFECT_H */
+#endif /* __d3d10effect_h__ */
diff --git a/mingw-w64-headers/include/d3d10effect.idl b/mingw-w64-headers/include/d3d10effect.idl
new file mode 100644
index 0000000..fe526aa
--- /dev/null
+++ b/mingw-w64-headers/include/d3d10effect.idl
@@ -0,0 +1,512 @@
+/*
+ * Copyright 2009 Henri Verbeet 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 "d3d10.idl";
+import "d3d10shader.idl";
+
+interface ID3D10EffectConstantBuffer;
+interface ID3D10EffectBlendVariable;
+interface ID3D10EffectDepthStencilVariable;
+interface ID3D10EffectDepthStencilViewVariable;
+interface ID3D10EffectMatrixVariable;
+interface ID3D10EffectPass;
+interface ID3D10EffectRasterizerVariable;
+interface ID3D10EffectRenderTargetViewVariable;
+interface ID3D10EffectSamplerVariable;
+interface ID3D10EffectScalarVariable;
+interface ID3D10EffectShaderVariable;
+interface ID3D10EffectShaderResourceVariable;
+interface ID3D10EffectStringVariable;
+interface ID3D10EffectVectorVariable;
+
+#ifndef D3D10_BYTES_FROM_BITS
+#define D3D10_BYTES_FROM_BITS(x) (((x) + 7) >> 3)
+#endif
+cpp_quote("#ifndef D3D10_BYTES_FROM_BITS")
+cpp_quote("#define D3D10_BYTES_FROM_BITS(x) (((x) + 7) >> 3)")
+cpp_quote("#endif")
+
+const unsigned int D3D10_EFFECT_VARIABLE_POOLED                 = 0x1;
+const unsigned int D3D10_EFFECT_VARIABLE_ANNOTATION             = 0x2;
+const unsigned int D3D10_EFFECT_VARIABLE_EXPLICIT_BIND_POINT    = 0x4;
+
+typedef enum _D3D10_DEVICE_STATE_TYPES
+{
+    D3D10_DST_SO_BUFFERS = 1,
+    D3D10_DST_OM_RENDER_TARGETS,
+    D3D10_DST_OM_DEPTH_STENCIL_STATE,
+    D3D10_DST_OM_BLEND_STATE,
+    D3D10_DST_VS,
+    D3D10_DST_VS_SAMPLERS,
+    D3D10_DST_VS_SHADER_RESOURCES,
+    D3D10_DST_VS_CONSTANT_BUFFERS,
+    D3D10_DST_GS,
+    D3D10_DST_GS_SAMPLERS,
+    D3D10_DST_GS_SHADER_RESOURCES,
+    D3D10_DST_GS_CONSTANT_BUFFERS,
+    D3D10_DST_PS,
+    D3D10_DST_PS_SAMPLERS,
+    D3D10_DST_PS_SHADER_RESOURCES,
+    D3D10_DST_PS_CONSTANT_BUFFERS,
+    D3D10_DST_IA_VERTEX_BUFFERS,
+    D3D10_DST_IA_INDEX_BUFFER,
+    D3D10_DST_IA_INPUT_LAYOUT,
+    D3D10_DST_IA_PRIMITIVE_TOPOLOGY,
+    D3D10_DST_RS_VIEWPORTS,
+    D3D10_DST_RS_SCISSOR_RECTS,
+    D3D10_DST_RS_RASTERIZER_STATE,
+    D3D10_DST_PREDICATION,
+} D3D10_DEVICE_STATE_TYPES;
+
+typedef struct _D3D10_EFFECT_TYPE_DESC
+{
+    const char *TypeName;
+    D3D10_SHADER_VARIABLE_CLASS Class;
+    D3D10_SHADER_VARIABLE_TYPE Type;
+    UINT Elements;
+    UINT Members;
+    UINT Rows;
+    UINT Columns;
+    UINT PackedSize;
+    UINT UnpackedSize;
+    UINT Stride;
+} D3D10_EFFECT_TYPE_DESC;
+
+typedef struct _D3D10_EFFECT_VARIABLE_DESC
+{
+    const char *Name;
+    const char *Semantic;
+    UINT Flags;
+    UINT Annotations;
+    UINT BufferOffset;
+    UINT ExplicitBindPoint;
+} D3D10_EFFECT_VARIABLE_DESC;
+
+typedef struct _D3D10_TECHNIQUE_DESC
+{
+    const char *Name;
+    UINT Passes;
+    UINT Annotations;
+} D3D10_TECHNIQUE_DESC;
+
+typedef struct _D3D10_STATE_BLOCK_MASK
+{
+    BYTE VS;
+    BYTE VSSamplers[D3D10_BYTES_FROM_BITS(D3D10_COMMONSHADER_SAMPLER_SLOT_COUNT)];
+    BYTE VSShaderResources[D3D10_BYTES_FROM_BITS(D3D10_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT)];
+    BYTE VSConstantBuffers[D3D10_BYTES_FROM_BITS(D3D10_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT)];
+    BYTE GS;
+    BYTE GSSamplers[D3D10_BYTES_FROM_BITS(D3D10_COMMONSHADER_SAMPLER_SLOT_COUNT)];
+    BYTE GSShaderResources[D3D10_BYTES_FROM_BITS(D3D10_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT)];
+    BYTE GSConstantBuffers[D3D10_BYTES_FROM_BITS(D3D10_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT)];
+    BYTE PS;
+    BYTE PSSamplers[D3D10_BYTES_FROM_BITS(D3D10_COMMONSHADER_SAMPLER_SLOT_COUNT)];
+    BYTE PSShaderResources[D3D10_BYTES_FROM_BITS(D3D10_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT)];
+    BYTE PSConstantBuffers[D3D10_BYTES_FROM_BITS(D3D10_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT)];
+    BYTE IAVertexBuffers[D3D10_BYTES_FROM_BITS(D3D10_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT)];
+    BYTE IAIndexBuffer;
+    BYTE IAInputLayout;
+    BYTE IAPrimitiveTopology;
+    BYTE OMRenderTargets;
+    BYTE OMDepthStencilState;
+    BYTE OMBlendState;
+    BYTE RSViewports;
+    BYTE RSScissorRects;
+    BYTE RSRasterizerState;
+    BYTE SOBuffers;
+    BYTE Predication;
+} D3D10_STATE_BLOCK_MASK;
+
+typedef struct _D3D10_EFFECT_DESC
+{
+    BOOL IsChildEffect;
+    UINT ConstantBuffers;
+    UINT SharedConstantBuffers;
+    UINT GlobalVariables;
+    UINT SharedGlobalVariables;
+    UINT Techniques;
+} D3D10_EFFECT_DESC;
+
+typedef struct _D3D10_EFFECT_SHADER_DESC
+{
+    const BYTE *pInputSignature;
+    BOOL IsInline;
+    const BYTE *pBytecode;
+    UINT BytecodeLength;
+    const char *SODecl;
+    UINT NumInputSignatureEntries;
+    UINT NumOutputSignatureEntries;
+} D3D10_EFFECT_SHADER_DESC;
+
+typedef struct _D3D10_PASS_DESC
+{
+    const char *Name;
+    UINT Annotations;
+    BYTE *pIAInputSignature;
+    SIZE_T IAInputSignatureSize;
+    UINT StencilRef;
+    UINT SampleMask;
+    FLOAT BlendFactor[4];
+} D3D10_PASS_DESC;
+
+typedef struct _D3D10_PASS_SHADER_DESC
+{
+    ID3D10EffectShaderVariable *pShaderVariable;
+    UINT ShaderIndex;
+} D3D10_PASS_SHADER_DESC;
+
+const unsigned int D3D10_EFFECT_COMPILE_CHILD_EFFECT    = 0x0001;
+const unsigned int D3D10_EFFECT_COMPILE_ALLOW_SLOW_OPS  = 0x0002;
+const unsigned int D3D10_EFFECT_SINGLE_THREADED         = 0x0008;
+
+[
+    local,
+    object,
+    uuid(4e9e1ddc-cd9d-4772-a837-00180b9b88fd),
+]
+interface ID3D10EffectType
+{
+    BOOL IsValid();
+    HRESULT GetDesc(D3D10_EFFECT_TYPE_DESC *desc);
+    ID3D10EffectType *GetMemberTypeByIndex(UINT index);
+    ID3D10EffectType *GetMemberTypeByName(const char *name);
+    ID3D10EffectType *GetMemberTypeBySemantic(const char *semantic);
+    const char *GetMemberName(UINT index);
+    const char *GetMemberSemantic(UINT index);
+}
+
+[
+    local,
+    object,
+    uuid(ae897105-00e6-45bf-bb8e-281dd6db8e1b),
+]
+interface ID3D10EffectVariable
+{
+    BOOL IsValid();
+    ID3D10EffectType *GetType();
+    HRESULT GetDesc(D3D10_EFFECT_VARIABLE_DESC *desc);
+    ID3D10EffectVariable *GetAnnotationByIndex(UINT index);
+    ID3D10EffectVariable *GetAnnotationByName(const char *name);
+    ID3D10EffectVariable *GetMemberByIndex(UINT index);
+    ID3D10EffectVariable *GetMemberByName(const char *name);
+    ID3D10EffectVariable *GetMemberBySemantic(const char *semantic);
+    ID3D10EffectVariable *GetElement(UINT index);
+    ID3D10EffectConstantBuffer *GetParentConstantBuffer();
+    ID3D10EffectScalarVariable *AsScalar();
+    ID3D10EffectVectorVariable *AsVector();
+    ID3D10EffectMatrixVariable *AsMatrix();
+    ID3D10EffectStringVariable *AsString();
+    ID3D10EffectShaderResourceVariable *AsShaderResource();
+    ID3D10EffectRenderTargetViewVariable *AsRenderTargetView();
+    ID3D10EffectDepthStencilViewVariable *AsDepthStencilView();
+    ID3D10EffectConstantBuffer *AsConstantBuffer();
+    ID3D10EffectShaderVariable *AsShader();
+    ID3D10EffectBlendVariable *AsBlend();
+    ID3D10EffectDepthStencilVariable *AsDepthStencil();
+    ID3D10EffectRasterizerVariable *AsRasterizer();
+    ID3D10EffectSamplerVariable *AsSampler();
+    HRESULT SetRawValue(void *data, UINT offset, UINT count);
+    HRESULT GetRawValue(void *data, UINT offset, UINT count);
+}
+
+[
+    local,
+    object,
+    uuid(56648f4d-cc8b-4444-a5ad-b5a3d76e91b3),
+]
+interface ID3D10EffectConstantBuffer : ID3D10EffectVariable
+{
+    HRESULT SetConstantBuffer(ID3D10Buffer *buffer);
+    HRESULT GetConstantBuffer(ID3D10Buffer **buffer);
+    HRESULT SetTextureBuffer(ID3D10ShaderResourceView *view);
+    HRESULT GetTextureBuffer(ID3D10ShaderResourceView **view);
+}
+
+[
+    local,
+    object,
+    uuid(00e48f7b-d2c8-49e8-a86c-022dee53431f),
+]
+interface ID3D10EffectScalarVariable : ID3D10EffectVariable
+{
+    HRESULT SetFloat(float value);
+    HRESULT GetFloat(float *value);
+    HRESULT SetFloatArray(float *values, UINT offset, UINT count);
+    HRESULT GetFloatArray(float *values, UINT offset, UINT count);
+    HRESULT SetInt(int value);
+    HRESULT GetInt(int *value);
+    HRESULT SetIntArray(int *values, UINT offset, UINT count);
+    HRESULT GetIntArray(int *values, UINT offset, UINT count);
+    HRESULT SetBool(BOOL value);
+    HRESULT GetBool(BOOL *value);
+    HRESULT SetBoolArray(BOOL *values, UINT offset, UINT count);
+    HRESULT GetBoolArray(BOOL *values, UINT offset, UINT count);
+}
+
+[
+    local,
+    object,
+    uuid(62b98c44-1f82-4c67-bcd0-72cf8f217e81),
+]
+interface ID3D10EffectVectorVariable : ID3D10EffectVariable
+{
+    HRESULT SetBoolVector(BOOL *value);
+    HRESULT SetIntVector(int *value);
+    HRESULT SetFloatVector(float *value);
+    HRESULT GetBoolVector(BOOL *value);
+    HRESULT GetIntVector(int *value);
+    HRESULT GetFloatVector(float *value);
+    HRESULT SetBoolVectorArray(BOOL *values, UINT offset, UINT count);
+    HRESULT SetIntVectorArray(int *values, UINT offset, UINT count);
+    HRESULT SetFloatVectorArray(float *values, UINT offset, UINT count);
+    HRESULT GetBoolVectorArray(BOOL *values, UINT offset, UINT count);
+    HRESULT GetIntVectorArray(int *values, UINT offset, UINT count);
+    HRESULT GetFloatVectorArray(float *values, UINT offset, UINT count);
+}
+
+[
+    local,
+    object,
+    uuid(50666c24-b82f-4eed-a172-5b6e7e8522e0),
+]
+interface ID3D10EffectMatrixVariable : ID3D10EffectVariable
+{
+    HRESULT SetMatrix(float *data);
+    HRESULT GetMatrix(float *data);
+    HRESULT SetMatrixArray(float *data, UINT offset, UINT count);
+    HRESULT GetMatrixArray(float *data, UINT offset, UINT count);
+    HRESULT SetMatrixTranspose(float *data);
+    HRESULT GetMatrixTranspose(float *data);
+    HRESULT SetMatrixTransposeArray(float *data, UINT offset, UINT count);
+    HRESULT GetMatrixTransposeArray(float *data, UINT offset, UINT count);
+}
+
+[
+    local,
+    object,
+    uuid(71417501-8df9-4e0a-a78a-255f9756baff),
+]
+interface ID3D10EffectStringVariable : ID3D10EffectVariable
+{
+    HRESULT GetString(const char **str);
+    HRESULT GetStringArray(const char **strs, UINT offset, UINT count);
+}
+
+[
+    local,
+    object,
+    uuid(c0a7157b-d872-4b1d-8073-efc2acd4b1fc),
+]
+interface ID3D10EffectShaderResourceVariable : ID3D10EffectVariable
+{
+    HRESULT SetResource(ID3D10ShaderResourceView *resource);
+    HRESULT GetResource(ID3D10ShaderResourceView **resource);
+    HRESULT SetResourceArray(ID3D10ShaderResourceView **resources, UINT offset, UINT count);
+    HRESULT GetResourceArray(ID3D10ShaderResourceView **resources, UINT offset, UINT count);
+}
+
+[
+    local,
+    object,
+    uuid(28ca0cc3-c2c9-40bb-b57f-67b737122b17),
+]
+interface ID3D10EffectRenderTargetViewVariable : ID3D10EffectVariable
+{
+    HRESULT SetRenderTarget(ID3D10RenderTargetView *view);
+    HRESULT GetRenderTarget(ID3D10RenderTargetView **view);
+    HRESULT SetRenderTargetArray(ID3D10RenderTargetView **views, UINT offset, UINT count);
+    HRESULT GetRenderTargetArray(ID3D10RenderTargetView **views, UINT offset, UINT count);
+}
+
+[
+    local,
+    object,
+    uuid(3e02c918-cc79-4985-b622-2d92ad701623),
+]
+interface ID3D10EffectDepthStencilViewVariable : ID3D10EffectVariable
+{
+    HRESULT SetDepthStencil(ID3D10DepthStencilView *view);
+    HRESULT GetDepthStencil(ID3D10DepthStencilView **view);
+    HRESULT SetDepthStencilArray(ID3D10DepthStencilView **views, UINT offset, UINT count);
+    HRESULT GetDepthStencilArray(ID3D10DepthStencilView **views, UINT offset, UINT count);
+}
+
+[
+    local,
+    object,
+    uuid(80849279-c799-4797-8c33-0407a07d9e06),
+]
+interface ID3D10EffectShaderVariable : ID3D10EffectVariable
+{
+    HRESULT GetShaderDesc(UINT index, D3D10_EFFECT_SHADER_DESC *desc);
+    HRESULT GetVertexShader(UINT index, ID3D10VertexShader **shader);
+    HRESULT GetGeometryShader(UINT index, ID3D10GeometryShader **shader);
+    HRESULT GetPixelShader(UINT index, ID3D10PixelShader **shader);
+    HRESULT GetInputSignatureElementDesc(UINT shader_index, UINT element_index,
+            D3D10_SIGNATURE_PARAMETER_DESC *desc);
+    HRESULT GetOutputSignatureElementDesc(UINT shader_index, UINT element_index,
+            D3D10_SIGNATURE_PARAMETER_DESC *desc);
+}
+
+[
+    local,
+    object,
+    uuid(1fcd2294-df6d-4eae-86b3-0e9160cfb07b),
+]
+interface ID3D10EffectBlendVariable : ID3D10EffectVariable
+{
+    HRESULT GetBlendState(UINT index, ID3D10BlendState **blend_state);
+    HRESULT GetBackingStore(UINT index, D3D10_BLEND_DESC *desc);
+}
+
+[
+    local,
+    object,
+    uuid(af482368-330a-46a5-9a5c-01c71af24c8d),
+]
+interface ID3D10EffectDepthStencilVariable : ID3D10EffectVariable
+{
+    HRESULT GetDepthStencilState(UINT index, ID3D10DepthStencilState **depth_stencil_state);
+    HRESULT GetBackingStore(UINT index, D3D10_DEPTH_STENCIL_DESC *desc);
+}
+
+[
+    local,
+    object,
+    uuid(21af9f0e-4d94-4ea9-9785-2cb76b8c0b34),
+]
+interface ID3D10EffectRasterizerVariable : ID3D10EffectVariable
+{
+    HRESULT GetRasterizerState(UINT index, ID3D10RasterizerState **rasterizer_state);
+    HRESULT GetBackingStore(UINT index, D3D10_RASTERIZER_DESC *desc);
+}
+
+[
+    local,
+    object,
+    uuid(6530d5c7-07e9-4271-a418-e7ce4bd1e480),
+]
+interface ID3D10EffectSamplerVariable : ID3D10EffectVariable
+{
+    HRESULT GetSampler(UINT index, ID3D10SamplerState **sampler);
+    HRESULT GetBackingStore(UINT index, D3D10_SAMPLER_DESC *desc);
+}
+
+[
+    local,
+    object,
+    uuid(db122ce8-d1c9-4292-b237-24ed3de8b175),
+]
+interface ID3D10EffectTechnique
+{
+    BOOL IsValid();
+    HRESULT GetDesc(D3D10_TECHNIQUE_DESC *desc);
+    ID3D10EffectVariable *GetAnnotationByIndex(UINT index);
+    ID3D10EffectVariable *GetAnnotationByName(const char *name);
+    ID3D10EffectPass *GetPassByIndex(UINT index);
+    ID3D10EffectPass *GetPassByName(const char *name);
+    HRESULT ComputeStateBlockMask(D3D10_STATE_BLOCK_MASK *mask);
+}
+
+[
+    local,
+    object,
+    uuid(51b0ca8b-ec0b-4519-870d-8ee1cb5017c7),
+]
+interface ID3D10Effect : IUnknown
+{
+    BOOL IsValid();
+    BOOL IsPool();
+    HRESULT GetDevice(ID3D10Device **device);
+    HRESULT GetDesc(D3D10_EFFECT_DESC *desc);
+    ID3D10EffectConstantBuffer *GetConstantBufferByIndex(UINT index);
+    ID3D10EffectConstantBuffer *GetConstantBufferByName(const char *name);
+    ID3D10EffectVariable *GetVariableByIndex(UINT index);
+    ID3D10EffectVariable *GetVariableByName(const char *name);
+    ID3D10EffectVariable *GetVariableBySemantic(const char *semantic);
+    ID3D10EffectTechnique *GetTechniqueByIndex(UINT index);
+    ID3D10EffectTechnique *GetTechniqueByName(const char *name);
+    HRESULT Optimize();
+    BOOL IsOptimized();
+}
+
+[
+    local,
+    object,
+    uuid(9537ab04-3250-412e-8213-fcd2f8677933),
+]
+interface ID3D10EffectPool : IUnknown
+{
+    ID3D10Effect *AsEffect();
+}
+
+[
+    local,
+    object,
+    uuid(5cfbeb89-1a06-46e0-b282-e3f9bfa36a54),
+]
+interface ID3D10EffectPass
+{
+    BOOL IsValid();
+    HRESULT GetDesc(D3D10_PASS_DESC *desc);
+    HRESULT GetVertexShaderDesc(D3D10_PASS_SHADER_DESC *desc);
+    HRESULT GetGeometryShaderDesc(D3D10_PASS_SHADER_DESC *desc);
+    HRESULT GetPixelShaderDesc(D3D10_PASS_SHADER_DESC *desc);
+    ID3D10EffectVariable *GetAnnotationByIndex(UINT index);
+    ID3D10EffectVariable *GetAnnotationByName(const char *name);
+    HRESULT Apply(UINT flags);
+    HRESULT ComputeStateBlockMask(D3D10_STATE_BLOCK_MASK *mask);
+}
+
+[
+    local,
+    object,
+    uuid(0803425a-57f5-4dd6-9465-a87570834a08),
+]
+interface ID3D10StateBlock : IUnknown
+{
+    HRESULT Capture();
+    HRESULT Apply();
+    HRESULT ReleaseAllDeviceObjects();
+    HRESULT GetDevice(ID3D10Device **device);
+}
+
+HRESULT __stdcall D3D10CompileEffectFromMemory(void *data, SIZE_T data_size, const char *filename,
+        const D3D10_SHADER_MACRO *defines, ID3D10Include *include, UINT hlsl_flags, UINT fx_flags,
+        ID3D10Blob **effect, ID3D10Blob **errors);
+HRESULT __stdcall D3D10CreateEffectFromMemory(void *data, SIZE_T data_size, UINT flags,
+        ID3D10Device *device, ID3D10EffectPool *effect_pool, ID3D10Effect **effect);
+HRESULT __stdcall D3D10CreateEffectPoolFromMemory(void *data, SIZE_T data_size, UINT fx_flags,
+        ID3D10Device *device, ID3D10EffectPool **effect_pool);
+HRESULT __stdcall D3D10CreateStateBlock(ID3D10Device *device,
+        D3D10_STATE_BLOCK_MASK *mask, ID3D10StateBlock **stateblock);
+
+HRESULT __stdcall D3D10StateBlockMaskDifference(D3D10_STATE_BLOCK_MASK *mask_x,
+        D3D10_STATE_BLOCK_MASK *mask_y, D3D10_STATE_BLOCK_MASK *result);
+HRESULT __stdcall D3D10StateBlockMaskDisableAll(D3D10_STATE_BLOCK_MASK *mask);
+HRESULT __stdcall D3D10StateBlockMaskDisableCapture(D3D10_STATE_BLOCK_MASK *mask,
+        D3D10_DEVICE_STATE_TYPES state_type, UINT start_idx, UINT count);
+HRESULT __stdcall D3D10StateBlockMaskEnableAll(D3D10_STATE_BLOCK_MASK *mask);
+HRESULT __stdcall D3D10StateBlockMaskEnableCapture(D3D10_STATE_BLOCK_MASK *mask,
+        D3D10_DEVICE_STATE_TYPES state_type, UINT start_idx, UINT count);
+BOOL __stdcall D3D10StateBlockMaskGetSetting(D3D10_STATE_BLOCK_MASK *mask,
+        D3D10_DEVICE_STATE_TYPES state_type, UINT idx);
+HRESULT __stdcall D3D10StateBlockMaskIntersect(D3D10_STATE_BLOCK_MASK *mask_x,
+        D3D10_STATE_BLOCK_MASK *mask_y, D3D10_STATE_BLOCK_MASK *result);
+HRESULT __stdcall D3D10StateBlockMaskUnion(D3D10_STATE_BLOCK_MASK *mask_x,
+        D3D10_STATE_BLOCK_MASK *mask_y, D3D10_STATE_BLOCK_MASK *result);
diff --git a/mingw-w64-headers/include/d3d10sdklayers.h b/mingw-w64-headers/include/d3d10sdklayers.h
index 9a6b3b9..b8733ac 100644
--- a/mingw-w64-headers/include/d3d10sdklayers.h
+++ b/mingw-w64-headers/include/d3d10sdklayers.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/d3d10sdklayers.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/d3d10sdklayers.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/d3d10shader.h b/mingw-w64-headers/include/d3d10shader.h
index 47efdb1..6e8d386 100644
--- a/mingw-w64-headers/include/d3d10shader.h
+++ b/mingw-w64-headers/include/d3d10shader.h
@@ -1,78 +1,127 @@
-#undef INTERFACE
-/*
- * Copyright 2009 Henri Verbeet 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
- *
- */
+/*** Autogenerated by WIDL 8.19 from include/d3d10shader.idl - Do not edit ***/
 
-#ifndef __WINE_D3D10SHADER_H
-#define __WINE_D3D10SHADER_H
+#ifdef _WIN32
+#ifndef __REQUIRED_RPCNDR_H_VERSION__
+#define __REQUIRED_RPCNDR_H_VERSION__ 475
+#endif
+#include <rpc.h>
+#include <rpcndr.h>
+#endif
 
-#include "d3d10.h"
+#ifndef COM_NO_WINDOWS_H
+#include <windows.h>
+#include <ole2.h>
+#endif
 
-#define D3D10_SHADER_DEBUG                          0x0001
-#define D3D10_SHADER_SKIP_VALIDATION                0x0002
-#define D3D10_SHADER_SKIP_OPTIMIZATION              0x0004
-#define D3D10_SHADER_PACK_MATRIX_ROW_MAJOR          0x0008
-#define D3D10_SHADER_PACK_MATRIX_COLUMN_MAJOR       0x0010
-#define D3D10_SHADER_PARTIAL_PRECISION              0x0020
-#define D3D10_SHADER_FORCE_VS_SOFTWARE_NO_OPT       0x0040
-#define D3D10_SHADER_FORCE_PS_SOFTWARE_NO_OPT       0x0080
-#define D3D10_SHADER_NO_PRESHADER                   0x0100
-#define D3D10_SHADER_AVOID_FLOW_CONTROL             0x0200
-#define D3D10_SHADER_PREFER_FLOW_CONTROL            0x0400
-#define D3D10_SHADER_ENABLE_STRICTNESS              0x0800
-#define D3D10_SHADER_ENABLE_BACKWARDS_COMPATIBILITY 0x1000
-#define D3D10_SHADER_IEEE_STRICTNESS                0x2000
-#define D3D10_SHADER_WARNINGS_ARE_ERRORS           0x40000
+#ifndef __d3d10shader_h__
+#define __d3d10shader_h__
 
-#define D3D10_SHADER_OPTIMIZATION_LEVEL0            0x4000
-#define D3D10_SHADER_OPTIMIZATION_LEVEL1            0x0000
-#define D3D10_SHADER_OPTIMIZATION_LEVEL2            0xC000
-#define D3D10_SHADER_OPTIMIZATION_LEVEL3            0x8000
+#ifndef __WIDL_INLINE
+#if defined(__cplusplus) || defined(_MSC_VER)
+#define __WIDL_INLINE inline
+#elif defined(__GNUC__)
+#define __WIDL_INLINE __inline__
+#endif
+#endif
 
-/* These are defined as version-neutral in d3dcommon.h */
+/* Forward declarations */
+
+#ifndef __ID3D10ShaderReflectionType_FWD_DEFINED__
+#define __ID3D10ShaderReflectionType_FWD_DEFINED__
+typedef interface ID3D10ShaderReflectionType ID3D10ShaderReflectionType;
+#ifdef __cplusplus
+interface ID3D10ShaderReflectionType;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __ID3D10ShaderReflectionVariable_FWD_DEFINED__
+#define __ID3D10ShaderReflectionVariable_FWD_DEFINED__
+typedef interface ID3D10ShaderReflectionVariable ID3D10ShaderReflectionVariable;
+#ifdef __cplusplus
+interface ID3D10ShaderReflectionVariable;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __ID3D10ShaderReflectionConstantBuffer_FWD_DEFINED__
+#define __ID3D10ShaderReflectionConstantBuffer_FWD_DEFINED__
+typedef interface ID3D10ShaderReflectionConstantBuffer ID3D10ShaderReflectionConstantBuffer;
+#ifdef __cplusplus
+interface ID3D10ShaderReflectionConstantBuffer;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __ID3D10ShaderReflection_FWD_DEFINED__
+#define __ID3D10ShaderReflection_FWD_DEFINED__
+typedef interface ID3D10ShaderReflection ID3D10ShaderReflection;
+#ifdef __cplusplus
+interface ID3D10ShaderReflection;
+#endif /* __cplusplus */
+#endif
+
+/* Headers for imported files */
+
+#include <d3d10.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define D3D10_SHADER_DEBUG (0x1)
+
+#define D3D10_SHADER_SKIP_VALIDATION (0x2)
+
+#define D3D10_SHADER_SKIP_OPTIMIZATION (0x4)
+
+#define D3D10_SHADER_PACK_MATRIX_ROW_MAJOR (0x8)
+
+#define D3D10_SHADER_PACK_MATRIX_COLUMN_MAJOR (0x10)
+
+#define D3D10_SHADER_PARTIAL_PRECISION (0x20)
+
+#define D3D10_SHADER_FORCE_VS_SOFTWARE_NO_OPT (0x40)
+
+#define D3D10_SHADER_FORCE_PS_SOFTWARE_NO_OPT (0x80)
+
+#define D3D10_SHADER_NO_PRESHADER (0x100)
+
+#define D3D10_SHADER_AVOID_FLOW_CONTROL (0x200)
+
+#define D3D10_SHADER_PREFER_FLOW_CONTROL (0x400)
+
+#define D3D10_SHADER_ENABLE_STRICTNESS (0x800)
+
+#define D3D10_SHADER_ENABLE_BACKWARDS_COMPATIBILITY (0x1000)
+
+#define D3D10_SHADER_IEEE_STRICTNESS (0x2000)
+
+#define D3D10_SHADER_WARNINGS_ARE_ERRORS (0x40000)
+
+#define D3D10_SHADER_OPTIMIZATION_LEVEL0 (0x4000)
+
+#define D3D10_SHADER_OPTIMIZATION_LEVEL1 (0x0)
+
+#define D3D10_SHADER_OPTIMIZATION_LEVEL2 (0xc000)
+
+#define D3D10_SHADER_OPTIMIZATION_LEVEL3 (0x8000)
+
 typedef D3D_SHADER_MACRO D3D10_SHADER_MACRO;
 typedef D3D_SHADER_MACRO *LPD3D10_SHADER_MACRO;
-
 typedef D3D_SHADER_VARIABLE_CLASS D3D10_SHADER_VARIABLE_CLASS;
 typedef D3D_SHADER_VARIABLE_CLASS *LPD3D10_SHADER_VARIABLE_CLASS;
-
 typedef D3D_CBUFFER_TYPE D3D10_CBUFFER_TYPE;
 typedef D3D_CBUFFER_TYPE *LPD3D10_CBUFFER_TYPE;
-
 typedef D3D_REGISTER_COMPONENT_TYPE D3D10_REGISTER_COMPONENT_TYPE;
-
 typedef D3D_RESOURCE_RETURN_TYPE D3D10_RESOURCE_RETURN_TYPE;
-
 typedef D3D_NAME D3D10_NAME;
-
 typedef D3D_SHADER_INPUT_TYPE D3D10_SHADER_INPUT_TYPE;
 typedef D3D_SHADER_INPUT_TYPE *LPD3D10_SHADER_INPUT_TYPE;
-
 typedef D3D_SHADER_VARIABLE_TYPE D3D10_SHADER_VARIABLE_TYPE;
 typedef D3D_SHADER_VARIABLE_TYPE *LPD3D10_SHADER_VARIABLE_TYPE;
-
 typedef D3D_INCLUDE_TYPE D3D10_INCLUDE_TYPE;
 typedef ID3DInclude ID3D10Include;
 typedef ID3DInclude *LPD3D10INCLUDE;
 #define IID_ID3D10Include IID_ID3DInclude
-
-typedef struct _D3D10_SHADER_INPUT_BIND_DESC
-{
+typedef struct _D3D10_SHADER_INPUT_BIND_DESC {
     const char *Name;
     D3D10_SHADER_INPUT_TYPE Type;
     UINT BindPoint;
@@ -82,9 +131,7 @@
     D3D10_SRV_DIMENSION Dimension;
     UINT NumSamples;
 } D3D10_SHADER_INPUT_BIND_DESC;
-
-typedef struct _D3D10_SIGNATURE_PARAMETER_DESC
-{
+typedef struct _D3D10_SIGNATURE_PARAMETER_DESC {
     const char *SemanticName;
     UINT SemanticIndex;
     UINT Register;
@@ -93,9 +140,7 @@
     BYTE Mask;
     BYTE ReadWriteMask;
 } D3D10_SIGNATURE_PARAMETER_DESC;
-
-typedef struct _D3D10_SHADER_DESC
-{
+typedef struct _D3D10_SHADER_DESC {
     UINT Version;
     const char *Creator;
     UINT Flags;
@@ -125,27 +170,21 @@
     D3D10_PRIMITIVE_TOPOLOGY GSOutputTopology;
     UINT GSMaxOutputVertexCount;
 } D3D10_SHADER_DESC;
-
-typedef struct _D3D10_SHADER_BUFFER_DESC
-{
+typedef struct _D3D10_SHADER_BUFFER_DESC {
     const char *Name;
     D3D10_CBUFFER_TYPE Type;
     UINT Variables;
     UINT Size;
     UINT uFlags;
 } D3D10_SHADER_BUFFER_DESC;
-
-typedef struct _D3D10_SHADER_VARIABLE_DESC
-{
+typedef struct _D3D10_SHADER_VARIABLE_DESC {
     const char *Name;
     UINT StartOffset;
     UINT Size;
     UINT uFlags;
     void *DefaultValue;
 } D3D10_SHADER_VARIABLE_DESC;
-
-typedef struct _D3D10_SHADER_TYPE_DESC
-{
+typedef struct _D3D10_SHADER_TYPE_DESC {
     D3D10_SHADER_VARIABLE_CLASS Class;
     D3D10_SHADER_VARIABLE_TYPE Type;
     UINT Rows;
@@ -154,81 +193,404 @@
     UINT Members;
     UINT Offset;
 } D3D10_SHADER_TYPE_DESC;
+/*****************************************************************************
+ * ID3D10ShaderReflectionType interface
+ */
+#ifndef __ID3D10ShaderReflectionType_INTERFACE_DEFINED__
+#define __ID3D10ShaderReflectionType_INTERFACE_DEFINED__
 
-DEFINE_GUID(IID_ID3D10ShaderReflectionType, 0xc530ad7d, 0x9b16, 0x4395, 0xa9, 0x79, 0xba, 0x2e, 0xcf, 0xf8, 0x3a, 0xdd);
-
-#define INTERFACE ID3D10ShaderReflectionType
-DECLARE_INTERFACE(ID3D10ShaderReflectionType)
+DEFINE_GUID(IID_ID3D10ShaderReflectionType, 0xc530ad7d, 0x9b16, 0x4395, 0xa9,0x79, 0xba,0x2e,0xcf,0xf8,0x3a,0xdd);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("c530ad7d-9b16-4395-a979-ba2ecff83add")
+ID3D10ShaderReflectionType
 {
-    STDMETHOD(GetDesc)(THIS_ D3D10_SHADER_TYPE_DESC *desc) PURE;
-    STDMETHOD_(struct ID3D10ShaderReflectionType *, GetMemberTypeByIndex)(THIS_ UINT index) PURE;
-    STDMETHOD_(struct ID3D10ShaderReflectionType *, GetMemberTypeByName)(THIS_ const char *name) PURE;
-    STDMETHOD_(const char *, GetMemberTypeName)(THIS_ UINT index) PURE;
+
+    BEGIN_INTERFACE
+
+    virtual HRESULT STDMETHODCALLTYPE GetDesc(
+        D3D10_SHADER_TYPE_DESC *desc) = 0;
+
+    virtual ID3D10ShaderReflectionType * STDMETHODCALLTYPE GetMemberTypeByIndex(
+        UINT index) = 0;
+
+    virtual ID3D10ShaderReflectionType * STDMETHODCALLTYPE GetMemberTypeByName(
+        const char *name) = 0;
+
+    virtual const char * STDMETHODCALLTYPE GetMemberTypeName(
+        UINT index) = 0;
+
+    END_INTERFACE
+
 };
-#undef INTERFACE
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(ID3D10ShaderReflectionType, 0xc530ad7d, 0x9b16, 0x4395, 0xa9,0x79, 0xba,0x2e,0xcf,0xf8,0x3a,0xdd)
+#endif
+#else
+typedef struct ID3D10ShaderReflectionTypeVtbl {
+    BEGIN_INTERFACE
 
-DEFINE_GUID(IID_ID3D10ShaderReflectionVariable, 0x1bf63c95, 0x2650, 0x405d, 0x99, 0xc1, 0x36, 0x36, 0xbd, 0x1d, 0xa0, 0xa1);
+    /*** ID3D10ShaderReflectionType methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetDesc)(
+        ID3D10ShaderReflectionType *This,
+        D3D10_SHADER_TYPE_DESC *desc);
 
-#define INTERFACE ID3D10ShaderReflectionVariable
-DECLARE_INTERFACE(ID3D10ShaderReflectionVariable)
-{
-    STDMETHOD(GetDesc)(THIS_ D3D10_SHADER_VARIABLE_DESC *desc) PURE;
-    STDMETHOD_(struct ID3D10ShaderReflectionType *, GetType)(THIS) PURE;
+    ID3D10ShaderReflectionType * (STDMETHODCALLTYPE *GetMemberTypeByIndex)(
+        ID3D10ShaderReflectionType *This,
+        UINT index);
+
+    ID3D10ShaderReflectionType * (STDMETHODCALLTYPE *GetMemberTypeByName)(
+        ID3D10ShaderReflectionType *This,
+        const char *name);
+
+    const char * (STDMETHODCALLTYPE *GetMemberTypeName)(
+        ID3D10ShaderReflectionType *This,
+        UINT index);
+
+    END_INTERFACE
+} ID3D10ShaderReflectionTypeVtbl;
+
+interface ID3D10ShaderReflectionType {
+    CONST_VTBL ID3D10ShaderReflectionTypeVtbl* lpVtbl;
 };
-#undef INTERFACE
 
-DEFINE_GUID(IID_ID3D10ShaderReflectionConstantBuffer, 0x66c66a94, 0xdddd, 0x4b62, 0xa6, 0x6a, 0xf0, 0xda, 0x33, 0xc2, 0xb4, 0xd0);
-
-#define INTERFACE ID3D10ShaderReflectionConstantBuffer
-DECLARE_INTERFACE(ID3D10ShaderReflectionConstantBuffer)
-{
-    STDMETHOD(GetDesc)(THIS_ D3D10_SHADER_BUFFER_DESC *desc) PURE;
-    STDMETHOD_(struct ID3D10ShaderReflectionVariable *, GetVariableByIndex)(THIS_ UINT index) PURE;
-    STDMETHOD_(struct ID3D10ShaderReflectionVariable *, GetVariableByName)(THIS_ const char *name) PURE;
-};
-#undef INTERFACE
-
-DEFINE_GUID(IID_ID3D10ShaderReflection, 0xd40e20b6, 0xf8f7, 0x42ad, 0xab, 0x20, 0x4b, 0xaf, 0x8f, 0x15, 0xdf, 0xaa);
-
-#define INTERFACE ID3D10ShaderReflection
-DECLARE_INTERFACE_(ID3D10ShaderReflection, IUnknown)
-{
-    /* IUnknown methods */
-    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **out) PURE;
-    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
-    STDMETHOD_(ULONG, Release)(THIS) PURE;
-    /* ID3D10ShaderReflection methods */
-    STDMETHOD(GetDesc)(THIS_ D3D10_SHADER_DESC *desc) PURE;
-    STDMETHOD_(struct ID3D10ShaderReflectionConstantBuffer *, GetConstantBufferByIndex)(THIS_ UINT index) PURE;
-    STDMETHOD_(struct ID3D10ShaderReflectionConstantBuffer *, GetConstantBufferByName)(THIS_ const char *name) PURE;
-    STDMETHOD(GetResourceBindingDesc)(THIS_ UINT index, D3D10_SHADER_INPUT_BIND_DESC *desc) PURE;
-    STDMETHOD(GetInputParameterDesc)(THIS_ UINT index, D3D10_SIGNATURE_PARAMETER_DESC *desc) PURE;
-    STDMETHOD(GetOutputParameterDesc)(THIS_ UINT index, D3D10_SIGNATURE_PARAMETER_DESC *desc) PURE;
-};
-#undef INTERFACE
-
-
-#ifdef __cplusplus
-extern "C" {
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** ID3D10ShaderReflectionType methods ***/
+#define ID3D10ShaderReflectionType_GetDesc(This,desc) (This)->lpVtbl->GetDesc(This,desc)
+#define ID3D10ShaderReflectionType_GetMemberTypeByIndex(This,index) (This)->lpVtbl->GetMemberTypeByIndex(This,index)
+#define ID3D10ShaderReflectionType_GetMemberTypeByName(This,name) (This)->lpVtbl->GetMemberTypeByName(This,name)
+#define ID3D10ShaderReflectionType_GetMemberTypeName(This,index) (This)->lpVtbl->GetMemberTypeName(This,index)
+#else
+/*** ID3D10ShaderReflectionType methods ***/
+static __WIDL_INLINE HRESULT ID3D10ShaderReflectionType_GetDesc(ID3D10ShaderReflectionType* This,D3D10_SHADER_TYPE_DESC *desc) {
+    return This->lpVtbl->GetDesc(This,desc);
+}
+static __WIDL_INLINE ID3D10ShaderReflectionType * ID3D10ShaderReflectionType_GetMemberTypeByIndex(ID3D10ShaderReflectionType* This,UINT index) {
+    return This->lpVtbl->GetMemberTypeByIndex(This,index);
+}
+static __WIDL_INLINE ID3D10ShaderReflectionType * ID3D10ShaderReflectionType_GetMemberTypeByName(ID3D10ShaderReflectionType* This,const char *name) {
+    return This->lpVtbl->GetMemberTypeByName(This,name);
+}
+static __WIDL_INLINE const char * ID3D10ShaderReflectionType_GetMemberTypeName(ID3D10ShaderReflectionType* This,UINT index) {
+    return This->lpVtbl->GetMemberTypeName(This,index);
+}
+#endif
 #endif
 
-HRESULT WINAPI D3D10CompileShader(const char *data, SIZE_T data_size, const char *filename,
-        const D3D10_SHADER_MACRO *defines, ID3D10Include *include, const char *entrypoint,
-        const char *profile, UINT flags, ID3D10Blob **shader, ID3D10Blob **error_messages);
-HRESULT WINAPI D3D10DisassembleShader(const void *data, SIZE_T data_size,
-        WINBOOL color_code, const char *comments, ID3D10Blob **disassembly);
-const char * WINAPI D3D10GetVertexShaderProfile(ID3D10Device *device);
-const char * WINAPI D3D10GetGeometryShaderProfile(ID3D10Device *device);
-const char * WINAPI D3D10GetPixelShaderProfile(ID3D10Device *device);
+#endif
 
-HRESULT WINAPI D3D10ReflectShader(const void *data, SIZE_T data_size, ID3D10ShaderReflection **reflector);
-HRESULT WINAPI D3D10GetInputSignatureBlob(const void *data, SIZE_T data_size, ID3D10Blob **blob);
-HRESULT WINAPI D3D10GetOutputSignatureBlob(const void *data, SIZE_T data_size, ID3D10Blob **blob);
-HRESULT WINAPI D3D10GetInputAndOutputSignatureBlob(const void *data, SIZE_T data_size, ID3D10Blob **blob);
-HRESULT WINAPI D3D10GetShaderDebugInfo(const void *data, SIZE_T data_size, ID3D10Blob **blob);
+
+#endif  /* __ID3D10ShaderReflectionType_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * ID3D10ShaderReflectionVariable interface
+ */
+#ifndef __ID3D10ShaderReflectionVariable_INTERFACE_DEFINED__
+#define __ID3D10ShaderReflectionVariable_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_ID3D10ShaderReflectionVariable, 0x1bf63c95, 0x2650, 0x405d, 0x99,0xc1, 0x36,0x36,0xbd,0x1d,0xa0,0xa1);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("1bf63c95-2650-405d-99c1-3636bd1da0a1")
+ID3D10ShaderReflectionVariable
+{
+
+    BEGIN_INTERFACE
+
+    virtual HRESULT STDMETHODCALLTYPE GetDesc(
+        D3D10_SHADER_VARIABLE_DESC *desc) = 0;
+
+    virtual ID3D10ShaderReflectionType * STDMETHODCALLTYPE GetType(
+        ) = 0;
+
+    END_INTERFACE
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(ID3D10ShaderReflectionVariable, 0x1bf63c95, 0x2650, 0x405d, 0x99,0xc1, 0x36,0x36,0xbd,0x1d,0xa0,0xa1)
+#endif
+#else
+typedef struct ID3D10ShaderReflectionVariableVtbl {
+    BEGIN_INTERFACE
+
+    /*** ID3D10ShaderReflectionVariable methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetDesc)(
+        ID3D10ShaderReflectionVariable *This,
+        D3D10_SHADER_VARIABLE_DESC *desc);
+
+    ID3D10ShaderReflectionType * (STDMETHODCALLTYPE *GetType)(
+        ID3D10ShaderReflectionVariable *This);
+
+    END_INTERFACE
+} ID3D10ShaderReflectionVariableVtbl;
+
+interface ID3D10ShaderReflectionVariable {
+    CONST_VTBL ID3D10ShaderReflectionVariableVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** ID3D10ShaderReflectionVariable methods ***/
+#define ID3D10ShaderReflectionVariable_GetDesc(This,desc) (This)->lpVtbl->GetDesc(This,desc)
+#define ID3D10ShaderReflectionVariable_GetType(This) (This)->lpVtbl->GetType(This)
+#else
+/*** ID3D10ShaderReflectionVariable methods ***/
+static __WIDL_INLINE HRESULT ID3D10ShaderReflectionVariable_GetDesc(ID3D10ShaderReflectionVariable* This,D3D10_SHADER_VARIABLE_DESC *desc) {
+    return This->lpVtbl->GetDesc(This,desc);
+}
+static __WIDL_INLINE ID3D10ShaderReflectionType * ID3D10ShaderReflectionVariable_GetType(ID3D10ShaderReflectionVariable* This) {
+    return This->lpVtbl->GetType(This);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __ID3D10ShaderReflectionVariable_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * ID3D10ShaderReflectionConstantBuffer interface
+ */
+#ifndef __ID3D10ShaderReflectionConstantBuffer_INTERFACE_DEFINED__
+#define __ID3D10ShaderReflectionConstantBuffer_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_ID3D10ShaderReflectionConstantBuffer, 0x66c66a94, 0xdddd, 0x4b62, 0xa6,0x6a, 0xf0,0xda,0x33,0xc2,0xb4,0xd0);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("66c66a94-dddd-4b62-a66a-f0da33c2b4d0")
+ID3D10ShaderReflectionConstantBuffer
+{
+
+    BEGIN_INTERFACE
+
+    virtual HRESULT STDMETHODCALLTYPE GetDesc(
+        D3D10_SHADER_BUFFER_DESC *desc) = 0;
+
+    virtual ID3D10ShaderReflectionVariable * STDMETHODCALLTYPE GetVariableByIndex(
+        UINT index) = 0;
+
+    virtual ID3D10ShaderReflectionVariable * STDMETHODCALLTYPE GetVariableByName(
+        const char *name) = 0;
+
+    END_INTERFACE
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(ID3D10ShaderReflectionConstantBuffer, 0x66c66a94, 0xdddd, 0x4b62, 0xa6,0x6a, 0xf0,0xda,0x33,0xc2,0xb4,0xd0)
+#endif
+#else
+typedef struct ID3D10ShaderReflectionConstantBufferVtbl {
+    BEGIN_INTERFACE
+
+    /*** ID3D10ShaderReflectionConstantBuffer methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetDesc)(
+        ID3D10ShaderReflectionConstantBuffer *This,
+        D3D10_SHADER_BUFFER_DESC *desc);
+
+    ID3D10ShaderReflectionVariable * (STDMETHODCALLTYPE *GetVariableByIndex)(
+        ID3D10ShaderReflectionConstantBuffer *This,
+        UINT index);
+
+    ID3D10ShaderReflectionVariable * (STDMETHODCALLTYPE *GetVariableByName)(
+        ID3D10ShaderReflectionConstantBuffer *This,
+        const char *name);
+
+    END_INTERFACE
+} ID3D10ShaderReflectionConstantBufferVtbl;
+
+interface ID3D10ShaderReflectionConstantBuffer {
+    CONST_VTBL ID3D10ShaderReflectionConstantBufferVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** ID3D10ShaderReflectionConstantBuffer methods ***/
+#define ID3D10ShaderReflectionConstantBuffer_GetDesc(This,desc) (This)->lpVtbl->GetDesc(This,desc)
+#define ID3D10ShaderReflectionConstantBuffer_GetVariableByIndex(This,index) (This)->lpVtbl->GetVariableByIndex(This,index)
+#define ID3D10ShaderReflectionConstantBuffer_GetVariableByName(This,name) (This)->lpVtbl->GetVariableByName(This,name)
+#else
+/*** ID3D10ShaderReflectionConstantBuffer methods ***/
+static __WIDL_INLINE HRESULT ID3D10ShaderReflectionConstantBuffer_GetDesc(ID3D10ShaderReflectionConstantBuffer* This,D3D10_SHADER_BUFFER_DESC *desc) {
+    return This->lpVtbl->GetDesc(This,desc);
+}
+static __WIDL_INLINE ID3D10ShaderReflectionVariable * ID3D10ShaderReflectionConstantBuffer_GetVariableByIndex(ID3D10ShaderReflectionConstantBuffer* This,UINT index) {
+    return This->lpVtbl->GetVariableByIndex(This,index);
+}
+static __WIDL_INLINE ID3D10ShaderReflectionVariable * ID3D10ShaderReflectionConstantBuffer_GetVariableByName(ID3D10ShaderReflectionConstantBuffer* This,const char *name) {
+    return This->lpVtbl->GetVariableByName(This,name);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __ID3D10ShaderReflectionConstantBuffer_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * ID3D10ShaderReflection interface
+ */
+#ifndef __ID3D10ShaderReflection_INTERFACE_DEFINED__
+#define __ID3D10ShaderReflection_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_ID3D10ShaderReflection, 0xd40e20b6, 0xf8f7, 0x42ad, 0xab,0x20, 0x4b,0xaf,0x8f,0x15,0xdf,0xaa);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("d40e20b6-f8f7-42ad-ab20-4baf8f15dfaa")
+ID3D10ShaderReflection : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE GetDesc(
+        D3D10_SHADER_DESC *desc) = 0;
+
+    virtual ID3D10ShaderReflectionConstantBuffer * STDMETHODCALLTYPE GetConstantBufferByIndex(
+        UINT index) = 0;
+
+    virtual ID3D10ShaderReflectionConstantBuffer * STDMETHODCALLTYPE GetConstantBufferByName(
+        const char *name) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetResourceBindingDesc(
+        UINT index,
+        D3D10_SHADER_INPUT_BIND_DESC *desc) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetInputParameterDesc(
+        UINT index,
+        D3D10_SIGNATURE_PARAMETER_DESC *desc) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetOutputParameterDesc(
+        UINT index,
+        D3D10_SIGNATURE_PARAMETER_DESC *desc) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(ID3D10ShaderReflection, 0xd40e20b6, 0xf8f7, 0x42ad, 0xab,0x20, 0x4b,0xaf,0x8f,0x15,0xdf,0xaa)
+#endif
+#else
+typedef struct ID3D10ShaderReflectionVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        ID3D10ShaderReflection *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        ID3D10ShaderReflection *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        ID3D10ShaderReflection *This);
+
+    /*** ID3D10ShaderReflection methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetDesc)(
+        ID3D10ShaderReflection *This,
+        D3D10_SHADER_DESC *desc);
+
+    ID3D10ShaderReflectionConstantBuffer * (STDMETHODCALLTYPE *GetConstantBufferByIndex)(
+        ID3D10ShaderReflection *This,
+        UINT index);
+
+    ID3D10ShaderReflectionConstantBuffer * (STDMETHODCALLTYPE *GetConstantBufferByName)(
+        ID3D10ShaderReflection *This,
+        const char *name);
+
+    HRESULT (STDMETHODCALLTYPE *GetResourceBindingDesc)(
+        ID3D10ShaderReflection *This,
+        UINT index,
+        D3D10_SHADER_INPUT_BIND_DESC *desc);
+
+    HRESULT (STDMETHODCALLTYPE *GetInputParameterDesc)(
+        ID3D10ShaderReflection *This,
+        UINT index,
+        D3D10_SIGNATURE_PARAMETER_DESC *desc);
+
+    HRESULT (STDMETHODCALLTYPE *GetOutputParameterDesc)(
+        ID3D10ShaderReflection *This,
+        UINT index,
+        D3D10_SIGNATURE_PARAMETER_DESC *desc);
+
+    END_INTERFACE
+} ID3D10ShaderReflectionVtbl;
+
+interface ID3D10ShaderReflection {
+    CONST_VTBL ID3D10ShaderReflectionVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define ID3D10ShaderReflection_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define ID3D10ShaderReflection_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define ID3D10ShaderReflection_Release(This) (This)->lpVtbl->Release(This)
+/*** ID3D10ShaderReflection methods ***/
+#define ID3D10ShaderReflection_GetDesc(This,desc) (This)->lpVtbl->GetDesc(This,desc)
+#define ID3D10ShaderReflection_GetConstantBufferByIndex(This,index) (This)->lpVtbl->GetConstantBufferByIndex(This,index)
+#define ID3D10ShaderReflection_GetConstantBufferByName(This,name) (This)->lpVtbl->GetConstantBufferByName(This,name)
+#define ID3D10ShaderReflection_GetResourceBindingDesc(This,index,desc) (This)->lpVtbl->GetResourceBindingDesc(This,index,desc)
+#define ID3D10ShaderReflection_GetInputParameterDesc(This,index,desc) (This)->lpVtbl->GetInputParameterDesc(This,index,desc)
+#define ID3D10ShaderReflection_GetOutputParameterDesc(This,index,desc) (This)->lpVtbl->GetOutputParameterDesc(This,index,desc)
+#else
+/*** IUnknown methods ***/
+static __WIDL_INLINE HRESULT ID3D10ShaderReflection_QueryInterface(ID3D10ShaderReflection* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static __WIDL_INLINE ULONG ID3D10ShaderReflection_AddRef(ID3D10ShaderReflection* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static __WIDL_INLINE ULONG ID3D10ShaderReflection_Release(ID3D10ShaderReflection* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** ID3D10ShaderReflection methods ***/
+static __WIDL_INLINE HRESULT ID3D10ShaderReflection_GetDesc(ID3D10ShaderReflection* This,D3D10_SHADER_DESC *desc) {
+    return This->lpVtbl->GetDesc(This,desc);
+}
+static __WIDL_INLINE ID3D10ShaderReflectionConstantBuffer * ID3D10ShaderReflection_GetConstantBufferByIndex(ID3D10ShaderReflection* This,UINT index) {
+    return This->lpVtbl->GetConstantBufferByIndex(This,index);
+}
+static __WIDL_INLINE ID3D10ShaderReflectionConstantBuffer * ID3D10ShaderReflection_GetConstantBufferByName(ID3D10ShaderReflection* This,const char *name) {
+    return This->lpVtbl->GetConstantBufferByName(This,name);
+}
+static __WIDL_INLINE HRESULT ID3D10ShaderReflection_GetResourceBindingDesc(ID3D10ShaderReflection* This,UINT index,D3D10_SHADER_INPUT_BIND_DESC *desc) {
+    return This->lpVtbl->GetResourceBindingDesc(This,index,desc);
+}
+static __WIDL_INLINE HRESULT ID3D10ShaderReflection_GetInputParameterDesc(ID3D10ShaderReflection* This,UINT index,D3D10_SIGNATURE_PARAMETER_DESC *desc) {
+    return This->lpVtbl->GetInputParameterDesc(This,index,desc);
+}
+static __WIDL_INLINE HRESULT ID3D10ShaderReflection_GetOutputParameterDesc(ID3D10ShaderReflection* This,UINT index,D3D10_SIGNATURE_PARAMETER_DESC *desc) {
+    return This->lpVtbl->GetOutputParameterDesc(This,index,desc);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __ID3D10ShaderReflection_INTERFACE_DEFINED__ */
+
+HRESULT __stdcall  D3D10CompileShader(const char *data,SIZE_T data_size,const char *filename,const D3D10_SHADER_MACRO *defines,ID3D10Include *include,const char *entrypoint,const char *profile,UINT flags,ID3D10Blob **shader,ID3D10Blob **error_messages);
+
+HRESULT __stdcall  D3D10DisassembleShader(const void *data,SIZE_T data_size,WINBOOL color_code,const char *comments,ID3D10Blob **disassembly);
+
+const char * __stdcall  D3D10GetVertexShaderProfile(ID3D10Device *device);
+
+const char * __stdcall  D3D10GetGeometryShaderProfile(ID3D10Device *device);
+
+const char * __stdcall  D3D10GetPixelShaderProfile(ID3D10Device *device);
+
+HRESULT __stdcall  D3D10ReflectShader(const void *data,SIZE_T data_size,ID3D10ShaderReflection **reflector);
+
+HRESULT __stdcall  D3D10GetInputSignatureBlob(const void *data,SIZE_T data_size,ID3D10Blob **blob);
+
+HRESULT __stdcall  D3D10GetOutputSignatureBlob(const void *data,SIZE_T data_size,ID3D10Blob **blob);
+
+HRESULT __stdcall  D3D10GetInputAndOutputSignatureBlob(const void *data,SIZE_T data_size,ID3D10Blob **blob);
+
+HRESULT __stdcall  D3D10GetShaderDebugInfo(const void *data,SIZE_T data_size,ID3D10Blob **blob);
+
+/* Begin additional prototypes for all interfaces */
+
+
+/* End additional prototypes */
 
 #ifdef __cplusplus
 }
 #endif
 
-#endif /* __WINE_D3D10SHADER_H */
+#endif /* __d3d10shader_h__ */
diff --git a/mingw-w64-headers/include/d3d10shader.idl b/mingw-w64-headers/include/d3d10shader.idl
new file mode 100644
index 0000000..91f453d
--- /dev/null
+++ b/mingw-w64-headers/include/d3d10shader.idl
@@ -0,0 +1,217 @@
+/*
+ * Copyright 2009 Henri Verbeet 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 "d3d10.idl";
+
+const unsigned int D3D10_SHADER_DEBUG                           = 0x00001;
+const unsigned int D3D10_SHADER_SKIP_VALIDATION                 = 0x00002;
+const unsigned int D3D10_SHADER_SKIP_OPTIMIZATION               = 0x00004;
+const unsigned int D3D10_SHADER_PACK_MATRIX_ROW_MAJOR           = 0x00008;
+const unsigned int D3D10_SHADER_PACK_MATRIX_COLUMN_MAJOR        = 0x00010;
+const unsigned int D3D10_SHADER_PARTIAL_PRECISION               = 0x00020;
+const unsigned int D3D10_SHADER_FORCE_VS_SOFTWARE_NO_OPT        = 0x00040;
+const unsigned int D3D10_SHADER_FORCE_PS_SOFTWARE_NO_OPT        = 0x00080;
+const unsigned int D3D10_SHADER_NO_PRESHADER                    = 0x00100;
+const unsigned int D3D10_SHADER_AVOID_FLOW_CONTROL              = 0x00200;
+const unsigned int D3D10_SHADER_PREFER_FLOW_CONTROL             = 0x00400;
+const unsigned int D3D10_SHADER_ENABLE_STRICTNESS               = 0x00800;
+const unsigned int D3D10_SHADER_ENABLE_BACKWARDS_COMPATIBILITY  = 0x01000;
+const unsigned int D3D10_SHADER_IEEE_STRICTNESS                 = 0x02000;
+const unsigned int D3D10_SHADER_WARNINGS_ARE_ERRORS             = 0x40000;
+
+const unsigned int D3D10_SHADER_OPTIMIZATION_LEVEL0             = 0x04000;
+const unsigned int D3D10_SHADER_OPTIMIZATION_LEVEL1             = 0x00000;
+const unsigned int D3D10_SHADER_OPTIMIZATION_LEVEL2             = 0x0c000;
+const unsigned int D3D10_SHADER_OPTIMIZATION_LEVEL3             = 0x08000;
+
+typedef D3D_SHADER_MACRO D3D10_SHADER_MACRO;
+typedef D3D_SHADER_MACRO *LPD3D10_SHADER_MACRO;
+
+typedef D3D_SHADER_VARIABLE_CLASS D3D10_SHADER_VARIABLE_CLASS;
+typedef D3D_SHADER_VARIABLE_CLASS *LPD3D10_SHADER_VARIABLE_CLASS;
+
+typedef D3D_CBUFFER_TYPE D3D10_CBUFFER_TYPE;
+typedef D3D_CBUFFER_TYPE *LPD3D10_CBUFFER_TYPE;
+
+typedef D3D_REGISTER_COMPONENT_TYPE D3D10_REGISTER_COMPONENT_TYPE;
+
+typedef D3D_RESOURCE_RETURN_TYPE D3D10_RESOURCE_RETURN_TYPE;
+
+typedef D3D_NAME D3D10_NAME;
+
+typedef D3D_SHADER_INPUT_TYPE D3D10_SHADER_INPUT_TYPE;
+typedef D3D_SHADER_INPUT_TYPE *LPD3D10_SHADER_INPUT_TYPE;
+
+typedef D3D_SHADER_VARIABLE_TYPE D3D10_SHADER_VARIABLE_TYPE;
+typedef D3D_SHADER_VARIABLE_TYPE *LPD3D10_SHADER_VARIABLE_TYPE;
+
+typedef D3D_INCLUDE_TYPE D3D10_INCLUDE_TYPE;
+typedef ID3DInclude ID3D10Include;
+typedef ID3DInclude *LPD3D10INCLUDE;
+cpp_quote("#define IID_ID3D10Include IID_ID3DInclude")
+
+typedef struct _D3D10_SHADER_INPUT_BIND_DESC
+{
+    const char *Name;
+    D3D10_SHADER_INPUT_TYPE Type;
+    UINT BindPoint;
+    UINT BindCount;
+    UINT uFlags;
+    D3D10_RESOURCE_RETURN_TYPE ReturnType;
+    D3D10_SRV_DIMENSION Dimension;
+    UINT NumSamples;
+} D3D10_SHADER_INPUT_BIND_DESC;
+
+typedef struct _D3D10_SIGNATURE_PARAMETER_DESC
+{
+    const char *SemanticName;
+    UINT SemanticIndex;
+    UINT Register;
+    D3D10_NAME SystemValueType;
+    D3D10_REGISTER_COMPONENT_TYPE ComponentType;
+    BYTE Mask;
+    BYTE ReadWriteMask;
+} D3D10_SIGNATURE_PARAMETER_DESC;
+
+typedef struct _D3D10_SHADER_DESC
+{
+    UINT Version;
+    const char *Creator;
+    UINT Flags;
+    UINT ConstantBuffers;
+    UINT BoundResources;
+    UINT InputParameters;
+    UINT OutputParameters;
+    UINT InstructionCount;
+    UINT TempRegisterCount;
+    UINT TempArrayCount;
+    UINT DefCount;
+    UINT DclCount;
+    UINT TextureNormalInstructions;
+    UINT TextureLoadInstructions;
+    UINT TextureCompInstructions;
+    UINT TextureBiasInstructions;
+    UINT TextureGradientInstructions;
+    UINT FloatInstructionCount;
+    UINT IntInstructionCount;
+    UINT UintInstructionCount;
+    UINT StaticFlowControlCount;
+    UINT DynamicFlowControlCount;
+    UINT MacroInstructionCount;
+    UINT ArrayInstructionCount;
+    UINT CutInstructionCount;
+    UINT EmitInstructionCount;
+    D3D10_PRIMITIVE_TOPOLOGY GSOutputTopology;
+    UINT GSMaxOutputVertexCount;
+} D3D10_SHADER_DESC;
+
+typedef struct _D3D10_SHADER_BUFFER_DESC
+{
+    const char *Name;
+    D3D10_CBUFFER_TYPE Type;
+    UINT Variables;
+    UINT Size;
+    UINT uFlags;
+} D3D10_SHADER_BUFFER_DESC;
+
+typedef struct _D3D10_SHADER_VARIABLE_DESC
+{
+    const char *Name;
+    UINT StartOffset;
+    UINT Size;
+    UINT uFlags;
+    void *DefaultValue;
+} D3D10_SHADER_VARIABLE_DESC;
+
+typedef struct _D3D10_SHADER_TYPE_DESC
+{
+    D3D10_SHADER_VARIABLE_CLASS Class;
+    D3D10_SHADER_VARIABLE_TYPE Type;
+    UINT Rows;
+    UINT Columns;
+    UINT Elements;
+    UINT Members;
+    UINT Offset;
+} D3D10_SHADER_TYPE_DESC;
+
+[
+    local,
+    object,
+    uuid(c530ad7d-9b16-4395-a979-ba2ecff83add),
+]
+interface ID3D10ShaderReflectionType
+{
+    HRESULT GetDesc(D3D10_SHADER_TYPE_DESC *desc);
+    ID3D10ShaderReflectionType *GetMemberTypeByIndex(UINT index);
+    ID3D10ShaderReflectionType *GetMemberTypeByName(const char *name);
+    const char *GetMemberTypeName(UINT index);
+};
+
+[
+    local,
+    object,
+    uuid(1bf63c95-2650-405d-99c1-3636bd1da0a1),
+]
+interface ID3D10ShaderReflectionVariable
+{
+    HRESULT GetDesc(D3D10_SHADER_VARIABLE_DESC *desc);
+    ID3D10ShaderReflectionType *GetType();
+};
+
+[
+    local,
+    object,
+    uuid(66c66a94-dddd-4b62-a66a-f0da33c2b4d0),
+]
+interface ID3D10ShaderReflectionConstantBuffer
+{
+    HRESULT GetDesc(D3D10_SHADER_BUFFER_DESC *desc);
+    ID3D10ShaderReflectionVariable *GetVariableByIndex(UINT index);
+    ID3D10ShaderReflectionVariable *GetVariableByName(const char *name);
+};
+
+[
+    local,
+    object,
+    uuid(d40e20b6-f8f7-42ad-ab20-4baf8f15dfaa),
+]
+interface ID3D10ShaderReflection : IUnknown
+{
+    HRESULT GetDesc(D3D10_SHADER_DESC *desc);
+    ID3D10ShaderReflectionConstantBuffer *GetConstantBufferByIndex(UINT index);
+    ID3D10ShaderReflectionConstantBuffer *GetConstantBufferByName(const char *name);
+    HRESULT GetResourceBindingDesc(UINT index, D3D10_SHADER_INPUT_BIND_DESC *desc);
+    HRESULT GetInputParameterDesc(UINT index, D3D10_SIGNATURE_PARAMETER_DESC *desc);
+    HRESULT GetOutputParameterDesc(UINT index, D3D10_SIGNATURE_PARAMETER_DESC *desc);
+};
+
+
+HRESULT __stdcall D3D10CompileShader(const char *data, SIZE_T data_size, const char *filename,
+        const D3D10_SHADER_MACRO *defines, ID3D10Include *include, const char *entrypoint,
+        const char *profile, UINT flags, ID3D10Blob **shader, ID3D10Blob **error_messages);
+HRESULT __stdcall D3D10DisassembleShader(const void *data, SIZE_T data_size,
+        BOOL color_code, const char *comments, ID3D10Blob **disassembly);
+const char * __stdcall D3D10GetVertexShaderProfile(ID3D10Device *device);
+const char * __stdcall D3D10GetGeometryShaderProfile(ID3D10Device *device);
+const char * __stdcall D3D10GetPixelShaderProfile(ID3D10Device *device);
+
+HRESULT __stdcall D3D10ReflectShader(const void *data, SIZE_T data_size, ID3D10ShaderReflection **reflector);
+HRESULT __stdcall D3D10GetInputSignatureBlob(const void *data, SIZE_T data_size, ID3D10Blob **blob);
+HRESULT __stdcall D3D10GetOutputSignatureBlob(const void *data, SIZE_T data_size, ID3D10Blob **blob);
+HRESULT __stdcall D3D10GetInputAndOutputSignatureBlob(const void *data, SIZE_T data_size, ID3D10Blob **blob);
+HRESULT __stdcall D3D10GetShaderDebugInfo(const void *data, SIZE_T data_size, ID3D10Blob **blob);
diff --git a/mingw-w64-headers/include/d3d11.h b/mingw-w64-headers/include/d3d11.h
index d0b40a2..7d97c7c 100644
--- a/mingw-w64-headers/include/d3d11.h
+++ b/mingw-w64-headers/include/d3d11.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/d3d11.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/d3d11.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/d3d11_1.h b/mingw-w64-headers/include/d3d11_1.h
index 5663bd2..737785e 100644
--- a/mingw-w64-headers/include/d3d11_1.h
+++ b/mingw-w64-headers/include/d3d11_1.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/d3d11_1.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/d3d11_1.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/d3d11_2.h b/mingw-w64-headers/include/d3d11_2.h
index ee1c545..60ad481 100644
--- a/mingw-w64-headers/include/d3d11_2.h
+++ b/mingw-w64-headers/include/d3d11_2.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/d3d11_2.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/d3d11_2.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/d3d11_3.h b/mingw-w64-headers/include/d3d11_3.h
index 660da96..5fcb423 100644
--- a/mingw-w64-headers/include/d3d11_3.h
+++ b/mingw-w64-headers/include/d3d11_3.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/d3d11_3.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/d3d11_3.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/d3d11_4.h b/mingw-w64-headers/include/d3d11_4.h
index c693537..8e7a2aa 100644
--- a/mingw-w64-headers/include/d3d11_4.h
+++ b/mingw-w64-headers/include/d3d11_4.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/d3d11_4.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/d3d11_4.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/d3d11on12.h b/mingw-w64-headers/include/d3d11on12.h
index ed70662..1e47636 100644
--- a/mingw-w64-headers/include/d3d11on12.h
+++ b/mingw-w64-headers/include/d3d11on12.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/d3d11on12.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/d3d11on12.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/d3d11sdklayers.h b/mingw-w64-headers/include/d3d11sdklayers.h
index 5e2d29f..c2c8718 100644
--- a/mingw-w64-headers/include/d3d11sdklayers.h
+++ b/mingw-w64-headers/include/d3d11sdklayers.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/d3d11sdklayers.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/d3d11sdklayers.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/d3d12.h b/mingw-w64-headers/include/d3d12.h
index 991aa6b..2b1b115 100644
--- a/mingw-w64-headers/include/d3d12.h
+++ b/mingw-w64-headers/include/d3d12.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/d3d12.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/d3d12.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/d3d12sdklayers.h b/mingw-w64-headers/include/d3d12sdklayers.h
index 8c23a4b..33978fa 100644
--- a/mingw-w64-headers/include/d3d12sdklayers.h
+++ b/mingw-w64-headers/include/d3d12sdklayers.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/d3d12sdklayers.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/d3d12sdklayers.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/d3d12shader.h b/mingw-w64-headers/include/d3d12shader.h
index 6a61cf5..ab330dc 100644
--- a/mingw-w64-headers/include/d3d12shader.h
+++ b/mingw-w64-headers/include/d3d12shader.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/d3d12shader.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/d3d12shader.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/d3d12video.h b/mingw-w64-headers/include/d3d12video.h
index be69840..6bf5342 100644
--- a/mingw-w64-headers/include/d3d12video.h
+++ b/mingw-w64-headers/include/d3d12video.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/d3d12video.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/d3d12video.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/d3dcommon.h b/mingw-w64-headers/include/d3dcommon.h
index 2c5c51b..bd7b9e4 100644
--- a/mingw-w64-headers/include/d3dcommon.h
+++ b/mingw-w64-headers/include/d3dcommon.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/d3dcommon.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/d3dcommon.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/dbgprop.h b/mingw-w64-headers/include/dbgprop.h
index 061628f..0554b61 100644
--- a/mingw-w64-headers/include/dbgprop.h
+++ b/mingw-w64-headers/include/dbgprop.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/dbgprop.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/dbgprop.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/dcommon.h b/mingw-w64-headers/include/dcommon.h
index cab322e..78db345 100644
--- a/mingw-w64-headers/include/dcommon.h
+++ b/mingw-w64-headers/include/dcommon.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/dcommon.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/dcommon.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/dcompanimation.h b/mingw-w64-headers/include/dcompanimation.h
index bb8ab30..ff9cc8d 100644
--- a/mingw-w64-headers/include/dcompanimation.h
+++ b/mingw-w64-headers/include/dcompanimation.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/dcompanimation.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/dcompanimation.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/ddstream.h b/mingw-w64-headers/include/ddstream.h
index 8d16a37..51d6f0c 100644
--- a/mingw-w64-headers/include/ddstream.h
+++ b/mingw-w64-headers/include/ddstream.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/ddstream.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/ddstream.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/devicetopology.h b/mingw-w64-headers/include/devicetopology.h
index fc9ad35..a7de470 100644
--- a/mingw-w64-headers/include/devicetopology.h
+++ b/mingw-w64-headers/include/devicetopology.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/devicetopology.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/devicetopology.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/dimm.h b/mingw-w64-headers/include/dimm.h
index 5fed2f2..6a753be 100644
--- a/mingw-w64-headers/include/dimm.h
+++ b/mingw-w64-headers/include/dimm.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/dimm.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/dimm.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/dinputd.h b/mingw-w64-headers/include/dinputd.h
index 4b9dabf..7d81de9 100644
--- a/mingw-w64-headers/include/dinputd.h
+++ b/mingw-w64-headers/include/dinputd.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/dinputd.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/dinputd.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/directmanipulation.h b/mingw-w64-headers/include/directmanipulation.h
index b981e82..5900b81 100644
--- a/mingw-w64-headers/include/directmanipulation.h
+++ b/mingw-w64-headers/include/directmanipulation.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/directmanipulation.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/directmanipulation.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/dispex.h b/mingw-w64-headers/include/dispex.h
index e66c1c1..8fd849d 100644
--- a/mingw-w64-headers/include/dispex.h
+++ b/mingw-w64-headers/include/dispex.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/dispex.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/dispex.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/dmodshow.h b/mingw-w64-headers/include/dmodshow.h
index ee04368..c711346 100644
--- a/mingw-w64-headers/include/dmodshow.h
+++ b/mingw-w64-headers/include/dmodshow.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/dmodshow.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/dmodshow.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/docobj.h b/mingw-w64-headers/include/docobj.h
index e5fdf7e..a96e82b 100644
--- a/mingw-w64-headers/include/docobj.h
+++ b/mingw-w64-headers/include/docobj.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/docobj.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/docobj.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/docobjectservice.h b/mingw-w64-headers/include/docobjectservice.h
index a2b49d8..70c824a 100644
--- a/mingw-w64-headers/include/docobjectservice.h
+++ b/mingw-w64-headers/include/docobjectservice.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/docobjectservice.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/docobjectservice.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/documenttarget.h b/mingw-w64-headers/include/documenttarget.h
index 8301d70..e850f61 100644
--- a/mingw-w64-headers/include/documenttarget.h
+++ b/mingw-w64-headers/include/documenttarget.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/documenttarget.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/documenttarget.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/downloadmgr.h b/mingw-w64-headers/include/downloadmgr.h
index dcd0146..1ec4314 100644
--- a/mingw-w64-headers/include/downloadmgr.h
+++ b/mingw-w64-headers/include/downloadmgr.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/downloadmgr.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/downloadmgr.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/drmexternals.h b/mingw-w64-headers/include/drmexternals.h
index aad8ccf..00f3c13 100644
--- a/mingw-w64-headers/include/drmexternals.h
+++ b/mingw-w64-headers/include/drmexternals.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/drmexternals.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/drmexternals.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/dvdif.h b/mingw-w64-headers/include/dvdif.h
index 61bb921..7292519 100644
--- a/mingw-w64-headers/include/dvdif.h
+++ b/mingw-w64-headers/include/dvdif.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/dvdif.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/dvdif.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/dwrite.h b/mingw-w64-headers/include/dwrite.h
index 73b3cce..e60b80d 100644
--- a/mingw-w64-headers/include/dwrite.h
+++ b/mingw-w64-headers/include/dwrite.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/dwrite.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/dwrite.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/dwrite_1.h b/mingw-w64-headers/include/dwrite_1.h
index b7ac62c..ca5798d 100644
--- a/mingw-w64-headers/include/dwrite_1.h
+++ b/mingw-w64-headers/include/dwrite_1.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/dwrite_1.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/dwrite_1.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/dwrite_2.h b/mingw-w64-headers/include/dwrite_2.h
index d968373..a13fe6e 100644
--- a/mingw-w64-headers/include/dwrite_2.h
+++ b/mingw-w64-headers/include/dwrite_2.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/dwrite_2.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/dwrite_2.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/dwrite_3.h b/mingw-w64-headers/include/dwrite_3.h
index bc9bba6..9184bd3 100644
--- a/mingw-w64-headers/include/dwrite_3.h
+++ b/mingw-w64-headers/include/dwrite_3.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/dwrite_3.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/dwrite_3.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/dxgi.h b/mingw-w64-headers/include/dxgi.h
index 822a14d..1c1401e 100644
--- a/mingw-w64-headers/include/dxgi.h
+++ b/mingw-w64-headers/include/dxgi.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/dxgi.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/dxgi.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/dxgi1_2.h b/mingw-w64-headers/include/dxgi1_2.h
index ac630ad..af4edf9 100644
--- a/mingw-w64-headers/include/dxgi1_2.h
+++ b/mingw-w64-headers/include/dxgi1_2.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/dxgi1_2.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/dxgi1_2.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/dxgi1_3.h b/mingw-w64-headers/include/dxgi1_3.h
index e849c14..079457f 100644
--- a/mingw-w64-headers/include/dxgi1_3.h
+++ b/mingw-w64-headers/include/dxgi1_3.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/dxgi1_3.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/dxgi1_3.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/dxgi1_4.h b/mingw-w64-headers/include/dxgi1_4.h
index 837612f..374be31 100644
--- a/mingw-w64-headers/include/dxgi1_4.h
+++ b/mingw-w64-headers/include/dxgi1_4.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/dxgi1_4.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/dxgi1_4.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/dxgi1_5.h b/mingw-w64-headers/include/dxgi1_5.h
index 839dce6..4b21de7 100644
--- a/mingw-w64-headers/include/dxgi1_5.h
+++ b/mingw-w64-headers/include/dxgi1_5.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/dxgi1_5.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/dxgi1_5.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/dxgi1_6.h b/mingw-w64-headers/include/dxgi1_6.h
index 960d8c0..ec568a7 100644
--- a/mingw-w64-headers/include/dxgi1_6.h
+++ b/mingw-w64-headers/include/dxgi1_6.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/dxgi1_6.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/dxgi1_6.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/dxgicommon.h b/mingw-w64-headers/include/dxgicommon.h
index b77f11e..58c90fd 100644
--- a/mingw-w64-headers/include/dxgicommon.h
+++ b/mingw-w64-headers/include/dxgicommon.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/dxgicommon.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/dxgicommon.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/dxgidebug.h b/mingw-w64-headers/include/dxgidebug.h
index 9940ba3..3cad550 100644
--- a/mingw-w64-headers/include/dxgidebug.h
+++ b/mingw-w64-headers/include/dxgidebug.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/dxgidebug.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/dxgidebug.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/dxgiformat.h b/mingw-w64-headers/include/dxgiformat.h
index 549ab56..a6e9bb7 100644
--- a/mingw-w64-headers/include/dxgiformat.h
+++ b/mingw-w64-headers/include/dxgiformat.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/dxgiformat.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/dxgiformat.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/dxgitype.h b/mingw-w64-headers/include/dxgitype.h
index 67b01ee..6c9791f 100644
--- a/mingw-w64-headers/include/dxgitype.h
+++ b/mingw-w64-headers/include/dxgitype.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/dxgitype.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/dxgitype.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/dxva2api.h b/mingw-w64-headers/include/dxva2api.h
index 34f42c0..1205f50 100644
--- a/mingw-w64-headers/include/dxva2api.h
+++ b/mingw-w64-headers/include/dxva2api.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/dxva2api.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/dxva2api.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/dxvahd.h b/mingw-w64-headers/include/dxvahd.h
index a3f3a73..6456f5b 100644
--- a/mingw-w64-headers/include/dxvahd.h
+++ b/mingw-w64-headers/include/dxvahd.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/dxvahd.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/dxvahd.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/endpointvolume.h b/mingw-w64-headers/include/endpointvolume.h
index 67a8c04..3c6b574 100644
--- a/mingw-w64-headers/include/endpointvolume.h
+++ b/mingw-w64-headers/include/endpointvolume.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/endpointvolume.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/endpointvolume.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/eventtoken.h b/mingw-w64-headers/include/eventtoken.h
index c1ef7a6..02fe8a9 100644
--- a/mingw-w64-headers/include/eventtoken.h
+++ b/mingw-w64-headers/include/eventtoken.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/eventtoken.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/eventtoken.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/evr.h b/mingw-w64-headers/include/evr.h
index ca427d1..5205a83 100644
--- a/mingw-w64-headers/include/evr.h
+++ b/mingw-w64-headers/include/evr.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/evr.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/evr.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/evr9.h b/mingw-w64-headers/include/evr9.h
index 42ae6e7..dec9745 100644
--- a/mingw-w64-headers/include/evr9.h
+++ b/mingw-w64-headers/include/evr9.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/evr9.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/evr9.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/exdisp.h b/mingw-w64-headers/include/exdisp.h
index d03b462..b93f407 100644
--- a/mingw-w64-headers/include/exdisp.h
+++ b/mingw-w64-headers/include/exdisp.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/exdisp.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/exdisp.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/filter.h b/mingw-w64-headers/include/filter.h
index ce78ecd..a148482 100644
--- a/mingw-w64-headers/include/filter.h
+++ b/mingw-w64-headers/include/filter.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/filter.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/filter.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/fsrm.h b/mingw-w64-headers/include/fsrm.h
index a6d4c6c..730fcb2 100644
--- a/mingw-w64-headers/include/fsrm.h
+++ b/mingw-w64-headers/include/fsrm.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/fsrm.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/fsrm.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/fsrmenums.h b/mingw-w64-headers/include/fsrmenums.h
index 414efb0..a9423d5 100644
--- a/mingw-w64-headers/include/fsrmenums.h
+++ b/mingw-w64-headers/include/fsrmenums.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/fsrmenums.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/fsrmenums.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/fsrmquota.h b/mingw-w64-headers/include/fsrmquota.h
index 8aee417..6f682d6 100644
--- a/mingw-w64-headers/include/fsrmquota.h
+++ b/mingw-w64-headers/include/fsrmquota.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/fsrmquota.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/fsrmquota.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/fsrmreports.h b/mingw-w64-headers/include/fsrmreports.h
index 95557ff..7c35bea 100644
--- a/mingw-w64-headers/include/fsrmreports.h
+++ b/mingw-w64-headers/include/fsrmreports.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/fsrmreports.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/fsrmreports.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/fsrmscreen.h b/mingw-w64-headers/include/fsrmscreen.h
index 202bc18..71bcf57 100644
--- a/mingw-w64-headers/include/fsrmscreen.h
+++ b/mingw-w64-headers/include/fsrmscreen.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/fsrmscreen.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/fsrmscreen.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/fusion.h b/mingw-w64-headers/include/fusion.h
index a8a75c7..726f7d3 100644
--- a/mingw-w64-headers/include/fusion.h
+++ b/mingw-w64-headers/include/fusion.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/fusion.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/fusion.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/fwptypes.h b/mingw-w64-headers/include/fwptypes.h
index 9d4fa05..1978684 100644
--- a/mingw-w64-headers/include/fwptypes.h
+++ b/mingw-w64-headers/include/fwptypes.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/fwptypes.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/fwptypes.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/hstring.h b/mingw-w64-headers/include/hstring.h
index 0e2a673..7b866ca 100644
--- a/mingw-w64-headers/include/hstring.h
+++ b/mingw-w64-headers/include/hstring.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/hstring.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/hstring.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/icftypes.h b/mingw-w64-headers/include/icftypes.h
index a6bcba2..4c5bf3c 100644
--- a/mingw-w64-headers/include/icftypes.h
+++ b/mingw-w64-headers/include/icftypes.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/icftypes.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/icftypes.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/icodecapi.h b/mingw-w64-headers/include/icodecapi.h
index 222aec3..2253fa5 100644
--- a/mingw-w64-headers/include/icodecapi.h
+++ b/mingw-w64-headers/include/icodecapi.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/icodecapi.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/icodecapi.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/iketypes.h b/mingw-w64-headers/include/iketypes.h
index ab9bb86..edc42bf 100644
--- a/mingw-w64-headers/include/iketypes.h
+++ b/mingw-w64-headers/include/iketypes.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/iketypes.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/iketypes.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/inputpaneinterop.h b/mingw-w64-headers/include/inputpaneinterop.h
index 5bcd87b..d66de03 100644
--- a/mingw-w64-headers/include/inputpaneinterop.h
+++ b/mingw-w64-headers/include/inputpaneinterop.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/inputpaneinterop.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/inputpaneinterop.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/inputscope.h b/mingw-w64-headers/include/inputscope.h
index 9a74521..6ece839 100644
--- a/mingw-w64-headers/include/inputscope.h
+++ b/mingw-w64-headers/include/inputscope.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/inputscope.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/inputscope.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/inspectable.h b/mingw-w64-headers/include/inspectable.h
index da66c38..c69b417 100644
--- a/mingw-w64-headers/include/inspectable.h
+++ b/mingw-w64-headers/include/inspectable.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/inspectable.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/inspectable.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/ivectorchangedeventargs.h b/mingw-w64-headers/include/ivectorchangedeventargs.h
index 5f0dc11..7b657b5 100644
--- a/mingw-w64-headers/include/ivectorchangedeventargs.h
+++ b/mingw-w64-headers/include/ivectorchangedeventargs.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/ivectorchangedeventargs.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/ivectorchangedeventargs.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/locationapi.h b/mingw-w64-headers/include/locationapi.h
index d65d945..e609df5 100644
--- a/mingw-w64-headers/include/locationapi.h
+++ b/mingw-w64-headers/include/locationapi.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/locationapi.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/locationapi.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/mediaobj.h b/mingw-w64-headers/include/mediaobj.h
index d5b678a..658969c 100644
--- a/mingw-w64-headers/include/mediaobj.h
+++ b/mingw-w64-headers/include/mediaobj.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/mediaobj.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/mediaobj.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/medparam.h b/mingw-w64-headers/include/medparam.h
index 90ec103..f904865 100644
--- a/mingw-w64-headers/include/medparam.h
+++ b/mingw-w64-headers/include/medparam.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/medparam.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/medparam.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/mfcaptureengine.h b/mingw-w64-headers/include/mfcaptureengine.h
index 7dd098d..7b20102 100644
--- a/mingw-w64-headers/include/mfcaptureengine.h
+++ b/mingw-w64-headers/include/mfcaptureengine.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/mfcaptureengine.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/mfcaptureengine.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/mfd3d12.h b/mingw-w64-headers/include/mfd3d12.h
index 92734e0..c559d68 100644
--- a/mingw-w64-headers/include/mfd3d12.h
+++ b/mingw-w64-headers/include/mfd3d12.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/mfd3d12.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/mfd3d12.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/mfidl.h b/mingw-w64-headers/include/mfidl.h
index 32d5df0..e4d1bb4 100644
--- a/mingw-w64-headers/include/mfidl.h
+++ b/mingw-w64-headers/include/mfidl.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/mfidl.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/mfidl.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/mfmediacapture.h b/mingw-w64-headers/include/mfmediacapture.h
index 65914d3..081fa37 100644
--- a/mingw-w64-headers/include/mfmediacapture.h
+++ b/mingw-w64-headers/include/mfmediacapture.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/mfmediacapture.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/mfmediacapture.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/mfobjects.h b/mingw-w64-headers/include/mfobjects.h
index 032a4a8..6622af3 100644
--- a/mingw-w64-headers/include/mfobjects.h
+++ b/mingw-w64-headers/include/mfobjects.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/mfobjects.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/mfobjects.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/mfplay.h b/mingw-w64-headers/include/mfplay.h
index 935c2b9..e861a88 100644
--- a/mingw-w64-headers/include/mfplay.h
+++ b/mingw-w64-headers/include/mfplay.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/mfplay.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/mfplay.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/mfreadwrite.h b/mingw-w64-headers/include/mfreadwrite.h
index 5dd7bef..a295acf 100644
--- a/mingw-w64-headers/include/mfreadwrite.h
+++ b/mingw-w64-headers/include/mfreadwrite.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/mfreadwrite.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/mfreadwrite.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/mftransform.h b/mingw-w64-headers/include/mftransform.h
index d590889..4b9b9ae 100644
--- a/mingw-w64-headers/include/mftransform.h
+++ b/mingw-w64-headers/include/mftransform.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/mftransform.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/mftransform.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/mmdeviceapi.h b/mingw-w64-headers/include/mmdeviceapi.h
index 4bde38c..fd86c75 100644
--- a/mingw-w64-headers/include/mmdeviceapi.h
+++ b/mingw-w64-headers/include/mmdeviceapi.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/mmdeviceapi.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/mmdeviceapi.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/mmstream.h b/mingw-w64-headers/include/mmstream.h
index f633d63..7a1c8f1 100644
--- a/mingw-w64-headers/include/mmstream.h
+++ b/mingw-w64-headers/include/mmstream.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/mmstream.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/mmstream.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/mscoree.h b/mingw-w64-headers/include/mscoree.h
index 539b0ad..48d7af7 100644
--- a/mingw-w64-headers/include/mscoree.h
+++ b/mingw-w64-headers/include/mscoree.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/mscoree.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/mscoree.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/msctf.h b/mingw-w64-headers/include/msctf.h
index 949446b..d3b6999 100644
--- a/mingw-w64-headers/include/msctf.h
+++ b/mingw-w64-headers/include/msctf.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/msctf.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/msctf.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/mshtmhst.h b/mingw-w64-headers/include/mshtmhst.h
index f3ed537..4009a8e 100644
--- a/mingw-w64-headers/include/mshtmhst.h
+++ b/mingw-w64-headers/include/mshtmhst.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/mshtmhst.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/mshtmhst.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/mshtml.h b/mingw-w64-headers/include/mshtml.h
index c260eb9..e8f72de 100644
--- a/mingw-w64-headers/include/mshtml.h
+++ b/mingw-w64-headers/include/mshtml.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/mshtml.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/mshtml.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/msinkaut.h b/mingw-w64-headers/include/msinkaut.h
index ae12d24..9760ff4 100644
--- a/mingw-w64-headers/include/msinkaut.h
+++ b/mingw-w64-headers/include/msinkaut.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/msinkaut.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/msinkaut.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/msinkaut_i.c b/mingw-w64-headers/include/msinkaut_i.c
index d6dec91..498f012 100644
--- a/mingw-w64-headers/include/msinkaut_i.c
+++ b/mingw-w64-headers/include/msinkaut_i.c
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from msinkaut.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from msinkaut.idl - Do not edit ***/
 
 #include <rpc.h>
 #include <rpcndr.h>
diff --git a/mingw-w64-headers/include/msopc.h b/mingw-w64-headers/include/msopc.h
index 3cb1826..d40fa7c 100644
--- a/mingw-w64-headers/include/msopc.h
+++ b/mingw-w64-headers/include/msopc.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/msopc.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/msopc.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/msxml.h b/mingw-w64-headers/include/msxml.h
index f33b149..6d2879a 100644
--- a/mingw-w64-headers/include/msxml.h
+++ b/mingw-w64-headers/include/msxml.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/msxml.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/msxml.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/msxml2.h b/mingw-w64-headers/include/msxml2.h
index ff8f674..75dfb0c 100644
--- a/mingw-w64-headers/include/msxml2.h
+++ b/mingw-w64-headers/include/msxml2.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/msxml2.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/msxml2.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/msxml6.h b/mingw-w64-headers/include/msxml6.h
index d801e35..cc8b356 100644
--- a/mingw-w64-headers/include/msxml6.h
+++ b/mingw-w64-headers/include/msxml6.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/msxml6.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/msxml6.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/napcertrelyingparty.h b/mingw-w64-headers/include/napcertrelyingparty.h
index b2873c4..5215c48 100644
--- a/mingw-w64-headers/include/napcertrelyingparty.h
+++ b/mingw-w64-headers/include/napcertrelyingparty.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/napcertrelyingparty.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/napcertrelyingparty.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/napcommon.h b/mingw-w64-headers/include/napcommon.h
index 7593bff..b26f6b3 100644
--- a/mingw-w64-headers/include/napcommon.h
+++ b/mingw-w64-headers/include/napcommon.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/napcommon.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/napcommon.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/napenforcementclient.h b/mingw-w64-headers/include/napenforcementclient.h
index 97869e9..20af307 100644
--- a/mingw-w64-headers/include/napenforcementclient.h
+++ b/mingw-w64-headers/include/napenforcementclient.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/napenforcementclient.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/napenforcementclient.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/napmanagement.h b/mingw-w64-headers/include/napmanagement.h
index 6ad1f2c..5ba0159 100644
--- a/mingw-w64-headers/include/napmanagement.h
+++ b/mingw-w64-headers/include/napmanagement.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/napmanagement.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/napmanagement.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/napprotocol.h b/mingw-w64-headers/include/napprotocol.h
index 627d232..b48ff28 100644
--- a/mingw-w64-headers/include/napprotocol.h
+++ b/mingw-w64-headers/include/napprotocol.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/napprotocol.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/napprotocol.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/napservermanagement.h b/mingw-w64-headers/include/napservermanagement.h
index f0bd5ba..74c3016 100644
--- a/mingw-w64-headers/include/napservermanagement.h
+++ b/mingw-w64-headers/include/napservermanagement.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/napservermanagement.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/napservermanagement.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/napsystemhealthagent.h b/mingw-w64-headers/include/napsystemhealthagent.h
index 6c18743..7b91c4e 100644
--- a/mingw-w64-headers/include/napsystemhealthagent.h
+++ b/mingw-w64-headers/include/napsystemhealthagent.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/napsystemhealthagent.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/napsystemhealthagent.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/napsystemhealthvalidator.h b/mingw-w64-headers/include/napsystemhealthvalidator.h
index 7530a23..b665466 100644
--- a/mingw-w64-headers/include/napsystemhealthvalidator.h
+++ b/mingw-w64-headers/include/napsystemhealthvalidator.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/napsystemhealthvalidator.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/napsystemhealthvalidator.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/naptypes.h b/mingw-w64-headers/include/naptypes.h
index cffba66..8524263 100644
--- a/mingw-w64-headers/include/naptypes.h
+++ b/mingw-w64-headers/include/naptypes.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/naptypes.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/naptypes.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/netcfgn.h b/mingw-w64-headers/include/netcfgn.h
index 26c8091..ea89447 100644
--- a/mingw-w64-headers/include/netcfgn.h
+++ b/mingw-w64-headers/include/netcfgn.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/netcfgn.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/netcfgn.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/netcfgx.h b/mingw-w64-headers/include/netcfgx.h
index bee7b95..f7659d7 100644
--- a/mingw-w64-headers/include/netcfgx.h
+++ b/mingw-w64-headers/include/netcfgx.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/netcfgx.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/netcfgx.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/netfw.h b/mingw-w64-headers/include/netfw.h
index ffe5105..58c3a01 100644
--- a/mingw-w64-headers/include/netfw.h
+++ b/mingw-w64-headers/include/netfw.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/netfw.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/netfw.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/netlistmgr.h b/mingw-w64-headers/include/netlistmgr.h
index bcf5f2f..11db0d7 100644
--- a/mingw-w64-headers/include/netlistmgr.h
+++ b/mingw-w64-headers/include/netlistmgr.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/netlistmgr.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/netlistmgr.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/oaidl.h b/mingw-w64-headers/include/oaidl.h
index 405fb2e..2fa4115 100644
--- a/mingw-w64-headers/include/oaidl.h
+++ b/mingw-w64-headers/include/oaidl.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/oaidl.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/oaidl.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/objectarray.h b/mingw-w64-headers/include/objectarray.h
index 2073880..bda821d 100644
--- a/mingw-w64-headers/include/objectarray.h
+++ b/mingw-w64-headers/include/objectarray.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/objectarray.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/objectarray.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/objidl.h b/mingw-w64-headers/include/objidl.h
index 1247696..6e9c248 100644
--- a/mingw-w64-headers/include/objidl.h
+++ b/mingw-w64-headers/include/objidl.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/objidl.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/objidl.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/objidlbase.h b/mingw-w64-headers/include/objidlbase.h
index d115030..84111bb 100644
--- a/mingw-w64-headers/include/objidlbase.h
+++ b/mingw-w64-headers/include/objidlbase.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/objidlbase.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/objidlbase.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/ocidl.h b/mingw-w64-headers/include/ocidl.h
index c1f967e..c5f726e 100644
--- a/mingw-w64-headers/include/ocidl.h
+++ b/mingw-w64-headers/include/ocidl.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/ocidl.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/ocidl.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/oleacc.h b/mingw-w64-headers/include/oleacc.h
index aab4ef7..132fd6b 100644
--- a/mingw-w64-headers/include/oleacc.h
+++ b/mingw-w64-headers/include/oleacc.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/oleacc.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/oleacc.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/oleidl.h b/mingw-w64-headers/include/oleidl.h
index 61d4eee..efa003b 100644
--- a/mingw-w64-headers/include/oleidl.h
+++ b/mingw-w64-headers/include/oleidl.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/oleidl.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/oleidl.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/optary.h b/mingw-w64-headers/include/optary.h
index 7b1b257..0ce5e4e 100644
--- a/mingw-w64-headers/include/optary.h
+++ b/mingw-w64-headers/include/optary.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/optary.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/optary.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/portabledeviceapi.h b/mingw-w64-headers/include/portabledeviceapi.h
index ac7d14b..6ddc055 100644
--- a/mingw-w64-headers/include/portabledeviceapi.h
+++ b/mingw-w64-headers/include/portabledeviceapi.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/portabledeviceapi.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/portabledeviceapi.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/portabledevicetypes.h b/mingw-w64-headers/include/portabledevicetypes.h
index e1ddb9e..4028c74 100644
--- a/mingw-w64-headers/include/portabledevicetypes.h
+++ b/mingw-w64-headers/include/portabledevicetypes.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/portabledevicetypes.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/portabledevicetypes.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/proofofpossessioncookieinfo.h b/mingw-w64-headers/include/proofofpossessioncookieinfo.h
index 62c2baf..75458bc 100644
--- a/mingw-w64-headers/include/proofofpossessioncookieinfo.h
+++ b/mingw-w64-headers/include/proofofpossessioncookieinfo.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/proofofpossessioncookieinfo.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/proofofpossessioncookieinfo.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/propidl.h b/mingw-w64-headers/include/propidl.h
index 6eef3f7..923b026 100644
--- a/mingw-w64-headers/include/propidl.h
+++ b/mingw-w64-headers/include/propidl.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/propidl.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/propidl.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/propsys.h b/mingw-w64-headers/include/propsys.h
index 3cb0b77..b616122 100644
--- a/mingw-w64-headers/include/propsys.h
+++ b/mingw-w64-headers/include/propsys.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/propsys.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/propsys.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/propvarutil.h b/mingw-w64-headers/include/propvarutil.h
index 968f640..7c9f3bf 100644
--- a/mingw-w64-headers/include/propvarutil.h
+++ b/mingw-w64-headers/include/propvarutil.h
@@ -27,6 +27,16 @@
 typedef LONG NTSTATUS;
 #endif
 
+#ifndef PSSTDAPI
+#ifdef _PROPSYS_
+#define PSSTDAPI          STDAPI
+#define PSSTDAPI_(type)   STDAPI_(type)
+#else
+#define PSSTDAPI          DECLSPEC_IMPORT STDAPI
+#define PSSTDAPI_(type)   DECLSPEC_IMPORT STDAPI_(type)
+#endif
+#endif
+
 #ifdef __cplusplus
 extern "C" {
 #endif
@@ -68,36 +78,37 @@
 
 typedef int PROPVAR_COMPARE_FLAGS;
 
-HRESULT WINAPI PropVariantChangeType(PROPVARIANT *ppropvarDest, REFPROPVARIANT propvarSrc,
+PSSTDAPI PropVariantChangeType(PROPVARIANT *ppropvarDest, REFPROPVARIANT propvarSrc,
                                      PROPVAR_CHANGE_FLAGS flags, VARTYPE vt);
-HRESULT WINAPI InitPropVariantFromGUIDAsString(REFGUID guid, PROPVARIANT *ppropvar);
-HRESULT WINAPI InitVariantFromFileTime(const FILETIME *ft, VARIANT *var);
-HRESULT WINAPI InitVariantFromGUIDAsString(REFGUID guid, VARIANT *pvar);
-HRESULT WINAPI InitPropVariantFromBuffer(const VOID *pv, UINT cb, PROPVARIANT *ppropvar);
-HRESULT WINAPI InitPropVariantFromCLSID(REFCLSID clsid, PROPVARIANT *ppropvar);
-HRESULT WINAPI InitVariantFromBuffer(const VOID *pv, UINT cb, VARIANT *pvar);
-HRESULT WINAPI PropVariantToGUID(const PROPVARIANT *ppropvar, GUID *guid);
-HRESULT WINAPI VariantToGUID(const VARIANT *pvar, GUID *guid);
-INT WINAPI PropVariantCompareEx(REFPROPVARIANT propvar1, REFPROPVARIANT propvar2,
+PSSTDAPI InitPropVariantFromGUIDAsString(REFGUID guid, PROPVARIANT *ppropvar);
+PSSTDAPI InitVariantFromFileTime(const FILETIME *ft, VARIANT *var);
+PSSTDAPI InitVariantFromGUIDAsString(REFGUID guid, VARIANT *pvar);
+PSSTDAPI InitPropVariantFromBuffer(const VOID *pv, UINT cb, PROPVARIANT *ppropvar);
+PSSTDAPI InitPropVariantFromCLSID(REFCLSID clsid, PROPVARIANT *ppropvar);
+PSSTDAPI InitVariantFromBuffer(const VOID *pv, UINT cb, VARIANT *pvar);
+PSSTDAPI PropVariantToGUID(const PROPVARIANT *ppropvar, GUID *guid);
+PSSTDAPI VariantToGUID(const VARIANT *pvar, GUID *guid);
+PSSTDAPI_(INT) PropVariantCompareEx(REFPROPVARIANT propvar1, REFPROPVARIANT propvar2,
                                 PROPVAR_COMPARE_UNIT uint, PROPVAR_COMPARE_FLAGS flags);
-HRESULT WINAPI InitPropVariantFromFileTime(const FILETIME *pftIn, PROPVARIANT *ppropvar);
-HRESULT WINAPI InitPropVariantFromStringVector(PCWSTR *strs, ULONG count, PROPVARIANT *ppropvar);
+PSSTDAPI InitPropVariantFromFileTime(const FILETIME *pftIn, PROPVARIANT *ppropvar);
+PSSTDAPI InitPropVariantFromStringVector(PCWSTR *strs, ULONG count, PROPVARIANT *ppropvar);
 
-HRESULT WINAPI PropVariantToDouble(REFPROPVARIANT propvarIn, double *ret);
-HRESULT WINAPI PropVariantToInt16(REFPROPVARIANT propvarIn, SHORT *ret);
-HRESULT WINAPI PropVariantToInt32(REFPROPVARIANT propvarIn, LONG *ret);
-HRESULT WINAPI PropVariantToInt64(REFPROPVARIANT propvarIn, LONGLONG *ret);
-HRESULT WINAPI PropVariantToUInt16(REFPROPVARIANT propvarIn, USHORT *ret);
-HRESULT WINAPI PropVariantToUInt32(REFPROPVARIANT propvarIn, ULONG *ret);
-HRESULT WINAPI PropVariantToUInt64(REFPROPVARIANT propvarIn, ULONGLONG *ret);
-HRESULT WINAPI PropVariantToBoolean(REFPROPVARIANT propvarIn, WINBOOL *ret);
-HRESULT WINAPI PropVariantToBuffer(REFPROPVARIANT propvarIn, void *ret, UINT cb);
-HRESULT WINAPI PropVariantToString(REFPROPVARIANT propvarIn, PWSTR ret, UINT cch);
-PCWSTR WINAPI PropVariantToStringWithDefault(REFPROPVARIANT propvarIn, LPCWSTR pszDefault);
-PCWSTR WINAPI VariantToStringWithDefault(const VARIANT *pvar, LPCWSTR pszDefault);
-HRESULT WINAPI VariantToString(REFVARIANT var, PWSTR ret, UINT cch);
+PSSTDAPI PropVariantToDouble(REFPROPVARIANT propvarIn, double *ret);
+PSSTDAPI PropVariantToInt16(REFPROPVARIANT propvarIn, SHORT *ret);
+PSSTDAPI PropVariantToInt32(REFPROPVARIANT propvarIn, LONG *ret);
+PSSTDAPI PropVariantToInt64(REFPROPVARIANT propvarIn, LONGLONG *ret);
+PSSTDAPI PropVariantToUInt16(REFPROPVARIANT propvarIn, USHORT *ret);
+PSSTDAPI PropVariantToUInt32(REFPROPVARIANT propvarIn, ULONG *ret);
+PSSTDAPI_(ULONG) PropVariantToUInt32WithDefault(REFPROPVARIANT propvarIn, ULONG uLDefault);
+PSSTDAPI PropVariantToUInt64(REFPROPVARIANT propvarIn, ULONGLONG *ret);
+PSSTDAPI PropVariantToBoolean(REFPROPVARIANT propvarIn, WINBOOL *ret);
+PSSTDAPI PropVariantToBuffer(REFPROPVARIANT propvarIn, void *ret, UINT cb);
+PSSTDAPI PropVariantToString(REFPROPVARIANT propvarIn, PWSTR ret, UINT cch);
+PSSTDAPI_(PCWSTR) PropVariantToStringWithDefault(REFPROPVARIANT propvarIn, LPCWSTR pszDefault);
+PSSTDAPI_(PCWSTR) VariantToStringWithDefault(const VARIANT *pvar, LPCWSTR pszDefault);
+PSSTDAPI VariantToString(REFVARIANT var, PWSTR ret, UINT cch);
 
-HRESULT WINAPI PropVariantToStringAlloc(REFPROPVARIANT propvarIn, WCHAR **ret);
+PSSTDAPI PropVariantToStringAlloc(REFPROPVARIANT propvarIn, WCHAR **ret);
 
 #ifdef __cplusplus
 
@@ -207,8 +218,8 @@
 #endif /* NO_PROPVAR_INLINES */
 #endif /* __cplusplus */
 
-HRESULT WINAPI StgSerializePropVariant(const PROPVARIANT *ppropvar, SERIALIZEDPROPERTYVALUE **ppprop, ULONG *pcb);
-HRESULT WINAPI StgDeserializePropVariant(const SERIALIZEDPROPERTYVALUE *pprop, ULONG cbmax, PROPVARIANT *ppropvar);
+PSSTDAPI StgSerializePropVariant(const PROPVARIANT *ppropvar, SERIALIZEDPROPERTYVALUE **ppprop, ULONG *pcb);
+PSSTDAPI StgDeserializePropVariant(const SERIALIZEDPROPERTYVALUE *pprop, ULONG cbmax, PROPVARIANT *ppropvar);
 
 #ifdef __cplusplus
 }
diff --git a/mingw-w64-headers/include/qedit.h b/mingw-w64-headers/include/qedit.h
index b2f63f3..e8a15cb 100644
--- a/mingw-w64-headers/include/qedit.h
+++ b/mingw-w64-headers/include/qedit.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/qedit.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/qedit.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/qnetwork.h b/mingw-w64-headers/include/qnetwork.h
index 8d23406..7f15f75 100644
--- a/mingw-w64-headers/include/qnetwork.h
+++ b/mingw-w64-headers/include/qnetwork.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/qnetwork.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/qnetwork.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/rdpencomapi.h b/mingw-w64-headers/include/rdpencomapi.h
index b942910..4765153 100644
--- a/mingw-w64-headers/include/rdpencomapi.h
+++ b/mingw-w64-headers/include/rdpencomapi.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/rdpencomapi.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/rdpencomapi.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/regbag.h b/mingw-w64-headers/include/regbag.h
index d10ebce..bb46c4c 100644
--- a/mingw-w64-headers/include/regbag.h
+++ b/mingw-w64-headers/include/regbag.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/regbag.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/regbag.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/relogger.h b/mingw-w64-headers/include/relogger.h
index 6e96037..95bb4a0 100644
--- a/mingw-w64-headers/include/relogger.h
+++ b/mingw-w64-headers/include/relogger.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/relogger.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/relogger.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/robuffer.h b/mingw-w64-headers/include/robuffer.h
index 3ebb64c..e589359 100644
--- a/mingw-w64-headers/include/robuffer.h
+++ b/mingw-w64-headers/include/robuffer.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/robuffer.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/robuffer.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/rtworkq.h b/mingw-w64-headers/include/rtworkq.h
index 17ff8aa..02c4a30 100644
--- a/mingw-w64-headers/include/rtworkq.h
+++ b/mingw-w64-headers/include/rtworkq.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/rtworkq.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/rtworkq.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/sapi51.h b/mingw-w64-headers/include/sapi51.h
index 0746a26..02e405d 100644
--- a/mingw-w64-headers/include/sapi51.h
+++ b/mingw-w64-headers/include/sapi51.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/sapi51.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/sapi51.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/sapi53.h b/mingw-w64-headers/include/sapi53.h
index 7f1f9d7..12b24a5 100644
--- a/mingw-w64-headers/include/sapi53.h
+++ b/mingw-w64-headers/include/sapi53.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/sapi53.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/sapi53.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/sapi54.h b/mingw-w64-headers/include/sapi54.h
index 0743359..0e500ea 100644
--- a/mingw-w64-headers/include/sapi54.h
+++ b/mingw-w64-headers/include/sapi54.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/sapi54.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/sapi54.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/sensorsapi.h b/mingw-w64-headers/include/sensorsapi.h
index bd2e9aa..94a3463 100644
--- a/mingw-w64-headers/include/sensorsapi.h
+++ b/mingw-w64-headers/include/sensorsapi.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/sensorsapi.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/sensorsapi.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/servprov.h b/mingw-w64-headers/include/servprov.h
index c2edf50..eaa5135 100644
--- a/mingw-w64-headers/include/servprov.h
+++ b/mingw-w64-headers/include/servprov.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/servprov.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/servprov.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/shldisp.h b/mingw-w64-headers/include/shldisp.h
index 435f89c..2711749 100644
--- a/mingw-w64-headers/include/shldisp.h
+++ b/mingw-w64-headers/include/shldisp.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/shldisp.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/shldisp.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/shobjidl.h b/mingw-w64-headers/include/shobjidl.h
index 3fcbc8b..681f7cb 100644
--- a/mingw-w64-headers/include/shobjidl.h
+++ b/mingw-w64-headers/include/shobjidl.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/shobjidl.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/shobjidl.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/shtypes.h b/mingw-w64-headers/include/shtypes.h
index 8c7a27b..b46f8b2 100644
--- a/mingw-w64-headers/include/shtypes.h
+++ b/mingw-w64-headers/include/shtypes.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/shtypes.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/shtypes.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/spatialaudioclient.h b/mingw-w64-headers/include/spatialaudioclient.h
index fd58448..09d7d7f 100644
--- a/mingw-w64-headers/include/spatialaudioclient.h
+++ b/mingw-w64-headers/include/spatialaudioclient.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/spatialaudioclient.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/spatialaudioclient.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/spellcheck.h b/mingw-w64-headers/include/spellcheck.h
index 088ba98..60e8b73 100644
--- a/mingw-w64-headers/include/spellcheck.h
+++ b/mingw-w64-headers/include/spellcheck.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/spellcheck.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/spellcheck.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/strmif.h b/mingw-w64-headers/include/strmif.h
index 63ed1d4..af69282 100644
--- a/mingw-w64-headers/include/strmif.h
+++ b/mingw-w64-headers/include/strmif.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/strmif.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/strmif.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/structuredquerycondition.h b/mingw-w64-headers/include/structuredquerycondition.h
index 2ce1301..70dc4f3 100644
--- a/mingw-w64-headers/include/structuredquerycondition.h
+++ b/mingw-w64-headers/include/structuredquerycondition.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/structuredquerycondition.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/structuredquerycondition.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/systemmediatransportcontrolsinterop.h b/mingw-w64-headers/include/systemmediatransportcontrolsinterop.h
index a22ed86..a290e1f 100644
--- a/mingw-w64-headers/include/systemmediatransportcontrolsinterop.h
+++ b/mingw-w64-headers/include/systemmediatransportcontrolsinterop.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/systemmediatransportcontrolsinterop.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/systemmediatransportcontrolsinterop.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/taskschd.h b/mingw-w64-headers/include/taskschd.h
index b731e71..1d32e4b 100644
--- a/mingw-w64-headers/include/taskschd.h
+++ b/mingw-w64-headers/include/taskschd.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/taskschd.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/taskschd.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/textstor.h b/mingw-w64-headers/include/textstor.h
index e2df5b2..82a1a73 100644
--- a/mingw-w64-headers/include/textstor.h
+++ b/mingw-w64-headers/include/textstor.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/textstor.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/textstor.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/thumbcache.h b/mingw-w64-headers/include/thumbcache.h
index 339b9d3..9dbcdf0 100644
--- a/mingw-w64-headers/include/thumbcache.h
+++ b/mingw-w64-headers/include/thumbcache.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/thumbcache.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/thumbcache.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/tlbref.h b/mingw-w64-headers/include/tlbref.h
index d979a74..0ec2071 100644
--- a/mingw-w64-headers/include/tlbref.h
+++ b/mingw-w64-headers/include/tlbref.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/tlbref.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/tlbref.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/tlogstg.h b/mingw-w64-headers/include/tlogstg.h
index fd6e54d..13bb33b 100644
--- a/mingw-w64-headers/include/tlogstg.h
+++ b/mingw-w64-headers/include/tlogstg.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/tlogstg.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/tlogstg.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/tpcshrd.h b/mingw-w64-headers/include/tpcshrd.h
index 961d414..3e0ffed 100644
--- a/mingw-w64-headers/include/tpcshrd.h
+++ b/mingw-w64-headers/include/tpcshrd.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/tpcshrd.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/tpcshrd.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/tsvirtualchannels.h b/mingw-w64-headers/include/tsvirtualchannels.h
index efc17b7..b4b5ba2 100644
--- a/mingw-w64-headers/include/tsvirtualchannels.h
+++ b/mingw-w64-headers/include/tsvirtualchannels.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/tsvirtualchannels.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/tsvirtualchannels.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/tuner.h b/mingw-w64-headers/include/tuner.h
index 937d473..e541db1 100644
--- a/mingw-w64-headers/include/tuner.h
+++ b/mingw-w64-headers/include/tuner.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/tuner.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/tuner.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/uianimation.h b/mingw-w64-headers/include/uianimation.h
index 935786b..51bdf6a 100644
--- a/mingw-w64-headers/include/uianimation.h
+++ b/mingw-w64-headers/include/uianimation.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/uianimation.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/uianimation.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/uiautomationclient.h b/mingw-w64-headers/include/uiautomationclient.h
index 502281a..f11aed6 100644
--- a/mingw-w64-headers/include/uiautomationclient.h
+++ b/mingw-w64-headers/include/uiautomationclient.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/uiautomationclient.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/uiautomationclient.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/uiautomationcore.h b/mingw-w64-headers/include/uiautomationcore.h
index 0d6e322..85c21a5 100644
--- a/mingw-w64-headers/include/uiautomationcore.h
+++ b/mingw-w64-headers/include/uiautomationcore.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/uiautomationcore.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/uiautomationcore.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/uiautomationcoreapi.h b/mingw-w64-headers/include/uiautomationcoreapi.h
index 6521a7c..9135458 100644
--- a/mingw-w64-headers/include/uiautomationcoreapi.h
+++ b/mingw-w64-headers/include/uiautomationcoreapi.h
@@ -559,6 +559,7 @@
 HRESULT WINAPI UiaEventAddWindow(HUIAEVENT huiaevent, HWND hwnd);
 HRESULT WINAPI UiaEventRemoveWindow(HUIAEVENT huiaevent, HWND hwnd);
 WINBOOL WINAPI UiaHasServerSideProvider(HWND hwnd);
+WINBOOL WINAPI UiaClientsAreListening(void);
 
 #ifdef __cplusplus
 }
diff --git a/mingw-w64-headers/include/uiviewsettingsinterop.h b/mingw-w64-headers/include/uiviewsettingsinterop.h
index ee65ab4..5260fc9 100644
--- a/mingw-w64-headers/include/uiviewsettingsinterop.h
+++ b/mingw-w64-headers/include/uiviewsettingsinterop.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/uiviewsettingsinterop.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/uiviewsettingsinterop.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/unknwn.h b/mingw-w64-headers/include/unknwn.h
index 4ef31bd..baac4b2 100644
--- a/mingw-w64-headers/include/unknwn.h
+++ b/mingw-w64-headers/include/unknwn.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/unknwn.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/unknwn.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/unknwnbase.h b/mingw-w64-headers/include/unknwnbase.h
index 15365e8..2f29588 100644
--- a/mingw-w64-headers/include/unknwnbase.h
+++ b/mingw-w64-headers/include/unknwnbase.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/unknwnbase.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/unknwnbase.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/urlhist.h b/mingw-w64-headers/include/urlhist.h
index 7bba544..66f8283 100644
--- a/mingw-w64-headers/include/urlhist.h
+++ b/mingw-w64-headers/include/urlhist.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/urlhist.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/urlhist.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/urlmon.h b/mingw-w64-headers/include/urlmon.h
index f7ba350..2f156f8 100644
--- a/mingw-w64-headers/include/urlmon.h
+++ b/mingw-w64-headers/include/urlmon.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/urlmon.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/urlmon.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/vdslun.h b/mingw-w64-headers/include/vdslun.h
index 3c3f296..7ca70ef 100644
--- a/mingw-w64-headers/include/vdslun.h
+++ b/mingw-w64-headers/include/vdslun.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/vdslun.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/vdslun.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/vidcap.h b/mingw-w64-headers/include/vidcap.h
index 7c96adb..c99eb74 100644
--- a/mingw-w64-headers/include/vidcap.h
+++ b/mingw-w64-headers/include/vidcap.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/vidcap.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/vidcap.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/vmr9.h b/mingw-w64-headers/include/vmr9.h
index df2044e..81227a9 100644
--- a/mingw-w64-headers/include/vmr9.h
+++ b/mingw-w64-headers/include/vmr9.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/vmr9.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/vmr9.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/vsadmin.h b/mingw-w64-headers/include/vsadmin.h
index 17a9769..24460d2 100644
--- a/mingw-w64-headers/include/vsadmin.h
+++ b/mingw-w64-headers/include/vsadmin.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/vsadmin.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/vsadmin.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/vsbackup.h b/mingw-w64-headers/include/vsbackup.h
index 0115580..7db3722 100644
--- a/mingw-w64-headers/include/vsbackup.h
+++ b/mingw-w64-headers/include/vsbackup.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/vsbackup.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/vsbackup.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/vsmgmt.h b/mingw-w64-headers/include/vsmgmt.h
index 9be5fc4..24d8b1d 100644
--- a/mingw-w64-headers/include/vsmgmt.h
+++ b/mingw-w64-headers/include/vsmgmt.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/vsmgmt.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/vsmgmt.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/vsprov.h b/mingw-w64-headers/include/vsprov.h
index dc83d31..35ea27f 100644
--- a/mingw-w64-headers/include/vsprov.h
+++ b/mingw-w64-headers/include/vsprov.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/vsprov.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/vsprov.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/vss.h b/mingw-w64-headers/include/vss.h
index eb5edcf..fdaf2a0 100644
--- a/mingw-w64-headers/include/vss.h
+++ b/mingw-w64-headers/include/vss.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/vss.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/vss.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/vswriter.h b/mingw-w64-headers/include/vswriter.h
index 4c1e14e..0f328a0 100644
--- a/mingw-w64-headers/include/vswriter.h
+++ b/mingw-w64-headers/include/vswriter.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/vswriter.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/vswriter.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/wbemads.h b/mingw-w64-headers/include/wbemads.h
index 247b029..5adfda1 100644
--- a/mingw-w64-headers/include/wbemads.h
+++ b/mingw-w64-headers/include/wbemads.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/wbemads.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/wbemads.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/wbemcli.h b/mingw-w64-headers/include/wbemcli.h
index e8ff540..879fecb 100644
--- a/mingw-w64-headers/include/wbemcli.h
+++ b/mingw-w64-headers/include/wbemcli.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/wbemcli.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/wbemcli.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/wbemdisp.h b/mingw-w64-headers/include/wbemdisp.h
index 9362a3d..64243ed 100644
--- a/mingw-w64-headers/include/wbemdisp.h
+++ b/mingw-w64-headers/include/wbemdisp.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/wbemdisp.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/wbemdisp.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/wbemprov.h b/mingw-w64-headers/include/wbemprov.h
index 76e17cd..bd997bc 100644
--- a/mingw-w64-headers/include/wbemprov.h
+++ b/mingw-w64-headers/include/wbemprov.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/wbemprov.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/wbemprov.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/wbemtran.h b/mingw-w64-headers/include/wbemtran.h
index c4c328f..9c3006d 100644
--- a/mingw-w64-headers/include/wbemtran.h
+++ b/mingw-w64-headers/include/wbemtran.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/wbemtran.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/wbemtran.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/wdstptmgmt.h b/mingw-w64-headers/include/wdstptmgmt.h
index 8e3db0c..515d20b 100644
--- a/mingw-w64-headers/include/wdstptmgmt.h
+++ b/mingw-w64-headers/include/wdstptmgmt.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/wdstptmgmt.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/wdstptmgmt.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/wincodec.h b/mingw-w64-headers/include/wincodec.h
index d4b75c3..45a1a2b 100644
--- a/mingw-w64-headers/include/wincodec.h
+++ b/mingw-w64-headers/include/wincodec.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/wincodec.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/wincodec.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/wincodecsdk.h b/mingw-w64-headers/include/wincodecsdk.h
index 7e78d24..fbf7af4 100644
--- a/mingw-w64-headers/include/wincodecsdk.h
+++ b/mingw-w64-headers/include/wincodecsdk.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/wincodecsdk.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/wincodecsdk.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.applicationmodel.core.h b/mingw-w64-headers/include/windows.applicationmodel.core.h
index 372461e..c2ee212 100644
--- a/mingw-w64-headers/include/windows.applicationmodel.core.h
+++ b/mingw-w64-headers/include/windows.applicationmodel.core.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/windows.applicationmodel.core.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/windows.applicationmodel.core.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.applicationmodel.h b/mingw-w64-headers/include/windows.applicationmodel.h
index 51cf6ea..daddd56 100644
--- a/mingw-w64-headers/include/windows.applicationmodel.h
+++ b/mingw-w64-headers/include/windows.applicationmodel.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/windows.applicationmodel.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/windows.applicationmodel.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.devices.bluetooth.h b/mingw-w64-headers/include/windows.devices.bluetooth.h
index 789236e..9d872ed 100644
--- a/mingw-w64-headers/include/windows.devices.bluetooth.h
+++ b/mingw-w64-headers/include/windows.devices.bluetooth.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/windows.devices.bluetooth.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/windows.devices.bluetooth.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.devices.enumeration.h b/mingw-w64-headers/include/windows.devices.enumeration.h
index fa8a96c..d15dc4b 100644
--- a/mingw-w64-headers/include/windows.devices.enumeration.h
+++ b/mingw-w64-headers/include/windows.devices.enumeration.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/windows.devices.enumeration.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/windows.devices.enumeration.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.devices.geolocation.h b/mingw-w64-headers/include/windows.devices.geolocation.h
index c5a0d64..bdd20f9 100644
--- a/mingw-w64-headers/include/windows.devices.geolocation.h
+++ b/mingw-w64-headers/include/windows.devices.geolocation.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/windows.devices.geolocation.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/windows.devices.geolocation.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.devices.haptics.h b/mingw-w64-headers/include/windows.devices.haptics.h
index 7acf2cc..ffc26e4 100644
--- a/mingw-w64-headers/include/windows.devices.haptics.h
+++ b/mingw-w64-headers/include/windows.devices.haptics.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/windows.devices.haptics.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/windows.devices.haptics.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.devices.power.h b/mingw-w64-headers/include/windows.devices.power.h
index 0709986..9a4dc54 100644
--- a/mingw-w64-headers/include/windows.devices.power.h
+++ b/mingw-w64-headers/include/windows.devices.power.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/windows.devices.power.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/windows.devices.power.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.devices.radios.h b/mingw-w64-headers/include/windows.devices.radios.h
index bfc750e..008893c 100644
--- a/mingw-w64-headers/include/windows.devices.radios.h
+++ b/mingw-w64-headers/include/windows.devices.radios.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/windows.devices.radios.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/windows.devices.radios.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.devices.usb.h b/mingw-w64-headers/include/windows.devices.usb.h
index c3e9f21..029023c 100644
--- a/mingw-w64-headers/include/windows.devices.usb.h
+++ b/mingw-w64-headers/include/windows.devices.usb.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/windows.devices.usb.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/windows.devices.usb.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.foundation.collections.h b/mingw-w64-headers/include/windows.foundation.collections.h
index a5a83f1..a4dd47c 100644
--- a/mingw-w64-headers/include/windows.foundation.collections.h
+++ b/mingw-w64-headers/include/windows.foundation.collections.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/windows.foundation.collections.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/windows.foundation.collections.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.foundation.h b/mingw-w64-headers/include/windows.foundation.h
index 6647e5e..c0c70f3 100644
--- a/mingw-w64-headers/include/windows.foundation.h
+++ b/mingw-w64-headers/include/windows.foundation.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/windows.foundation.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/windows.foundation.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.foundation.metadata.h b/mingw-w64-headers/include/windows.foundation.metadata.h
index f07f9c7..7c1af60 100644
--- a/mingw-w64-headers/include/windows.foundation.metadata.h
+++ b/mingw-w64-headers/include/windows.foundation.metadata.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/windows.foundation.metadata.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/windows.foundation.metadata.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.foundation.numerics.h b/mingw-w64-headers/include/windows.foundation.numerics.h
index 614d40b..bc25f33 100644
--- a/mingw-w64-headers/include/windows.foundation.numerics.h
+++ b/mingw-w64-headers/include/windows.foundation.numerics.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/windows.foundation.numerics.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/windows.foundation.numerics.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.gaming.input.custom.h b/mingw-w64-headers/include/windows.gaming.input.custom.h
index 56c9f89..f6ccfa0 100644
--- a/mingw-w64-headers/include/windows.gaming.input.custom.h
+++ b/mingw-w64-headers/include/windows.gaming.input.custom.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/windows.gaming.input.custom.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/windows.gaming.input.custom.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.gaming.input.forcefeedback.h b/mingw-w64-headers/include/windows.gaming.input.forcefeedback.h
index f96f2a8..d711227 100644
--- a/mingw-w64-headers/include/windows.gaming.input.forcefeedback.h
+++ b/mingw-w64-headers/include/windows.gaming.input.forcefeedback.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/windows.gaming.input.forcefeedback.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/windows.gaming.input.forcefeedback.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.gaming.input.h b/mingw-w64-headers/include/windows.gaming.input.h
index 5bd8c60..adf8825 100644
--- a/mingw-w64-headers/include/windows.gaming.input.h
+++ b/mingw-w64-headers/include/windows.gaming.input.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/windows.gaming.input.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/windows.gaming.input.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.gaming.ui.h b/mingw-w64-headers/include/windows.gaming.ui.h
index 539dddd..d612af9 100644
--- a/mingw-w64-headers/include/windows.gaming.ui.h
+++ b/mingw-w64-headers/include/windows.gaming.ui.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/windows.gaming.ui.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/windows.gaming.ui.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.globalization.h b/mingw-w64-headers/include/windows.globalization.h
index 11d1fd2..0bdf236 100644
--- a/mingw-w64-headers/include/windows.globalization.h
+++ b/mingw-w64-headers/include/windows.globalization.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/windows.globalization.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/windows.globalization.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.graphics.capture.h b/mingw-w64-headers/include/windows.graphics.capture.h
index b279639..d8d5409 100644
--- a/mingw-w64-headers/include/windows.graphics.capture.h
+++ b/mingw-w64-headers/include/windows.graphics.capture.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/windows.graphics.capture.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/windows.graphics.capture.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.graphics.capture.interop.h b/mingw-w64-headers/include/windows.graphics.capture.interop.h
index 6e32dab..f4f632f 100644
--- a/mingw-w64-headers/include/windows.graphics.capture.interop.h
+++ b/mingw-w64-headers/include/windows.graphics.capture.interop.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/windows.graphics.capture.interop.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/windows.graphics.capture.interop.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.graphics.directx.direct3d11.h b/mingw-w64-headers/include/windows.graphics.directx.direct3d11.h
index 9053de7..354258f 100644
--- a/mingw-w64-headers/include/windows.graphics.directx.direct3d11.h
+++ b/mingw-w64-headers/include/windows.graphics.directx.direct3d11.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/windows.graphics.directx.direct3d11.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/windows.graphics.directx.direct3d11.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.graphics.directx.h b/mingw-w64-headers/include/windows.graphics.directx.h
index 8b1d875..8e6d089 100644
--- a/mingw-w64-headers/include/windows.graphics.directx.h
+++ b/mingw-w64-headers/include/windows.graphics.directx.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/windows.graphics.directx.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/windows.graphics.directx.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.graphics.effects.h b/mingw-w64-headers/include/windows.graphics.effects.h
index 73d0af8..c193190 100644
--- a/mingw-w64-headers/include/windows.graphics.effects.h
+++ b/mingw-w64-headers/include/windows.graphics.effects.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/windows.graphics.effects.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/windows.graphics.effects.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.graphics.holographic.h b/mingw-w64-headers/include/windows.graphics.holographic.h
index 99ae61c..8979bda 100644
--- a/mingw-w64-headers/include/windows.graphics.holographic.h
+++ b/mingw-w64-headers/include/windows.graphics.holographic.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/windows.graphics.holographic.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/windows.graphics.holographic.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.management.deployment.h b/mingw-w64-headers/include/windows.management.deployment.h
index 3b23a0f..289dd79 100644
--- a/mingw-w64-headers/include/windows.management.deployment.h
+++ b/mingw-w64-headers/include/windows.management.deployment.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/windows.management.deployment.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/windows.management.deployment.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.media.capture.h b/mingw-w64-headers/include/windows.media.capture.h
index b1ffd6d..15fc1f9 100644
--- a/mingw-w64-headers/include/windows.media.capture.h
+++ b/mingw-w64-headers/include/windows.media.capture.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/windows.media.capture.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/windows.media.capture.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.media.closedcaptioning.h b/mingw-w64-headers/include/windows.media.closedcaptioning.h
index dff5ee3..9e662a7 100644
--- a/mingw-w64-headers/include/windows.media.closedcaptioning.h
+++ b/mingw-w64-headers/include/windows.media.closedcaptioning.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/windows.media.closedcaptioning.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/windows.media.closedcaptioning.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.media.devices.h b/mingw-w64-headers/include/windows.media.devices.h
index 12f0624..618a1ca 100644
--- a/mingw-w64-headers/include/windows.media.devices.h
+++ b/mingw-w64-headers/include/windows.media.devices.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/windows.media.devices.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/windows.media.devices.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.media.effects.h b/mingw-w64-headers/include/windows.media.effects.h
index 40350ac..7eec024 100644
--- a/mingw-w64-headers/include/windows.media.effects.h
+++ b/mingw-w64-headers/include/windows.media.effects.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/windows.media.effects.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/windows.media.effects.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.media.h b/mingw-w64-headers/include/windows.media.h
index b1a7f67..cca38ad 100644
--- a/mingw-w64-headers/include/windows.media.h
+++ b/mingw-w64-headers/include/windows.media.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/windows.media.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/windows.media.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
@@ -41,6 +41,36 @@
 #endif /* __cplusplus */
 #endif
 
+#ifndef ____x_ABI_CWindows_CMedia_CIMusicDisplayProperties_FWD_DEFINED__
+#define ____x_ABI_CWindows_CMedia_CIMusicDisplayProperties_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CMedia_CIMusicDisplayProperties __x_ABI_CWindows_CMedia_CIMusicDisplayProperties;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CMedia_CIMusicDisplayProperties ABI::Windows::Media::IMusicDisplayProperties
+namespace ABI {
+    namespace Windows {
+        namespace Media {
+            interface IMusicDisplayProperties;
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CMedia_CIMusicDisplayProperties2_FWD_DEFINED__
+#define ____x_ABI_CWindows_CMedia_CIMusicDisplayProperties2_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CMedia_CIMusicDisplayProperties2 __x_ABI_CWindows_CMedia_CIMusicDisplayProperties2;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CMedia_CIMusicDisplayProperties2 ABI::Windows::Media::IMusicDisplayProperties2
+namespace ABI {
+    namespace Windows {
+        namespace Media {
+            interface IMusicDisplayProperties2;
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
 #ifndef ____x_ABI_CWindows_CMedia_CISystemMediaTransportControls_FWD_DEFINED__
 #define ____x_ABI_CWindows_CMedia_CISystemMediaTransportControls_FWD_DEFINED__
 typedef interface __x_ABI_CWindows_CMedia_CISystemMediaTransportControls __x_ABI_CWindows_CMedia_CISystemMediaTransportControls;
@@ -56,6 +86,21 @@
 #endif /* __cplusplus */
 #endif
 
+#ifndef ____x_ABI_CWindows_CMedia_CISystemMediaTransportControlsDisplayUpdater_FWD_DEFINED__
+#define ____x_ABI_CWindows_CMedia_CISystemMediaTransportControlsDisplayUpdater_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CMedia_CISystemMediaTransportControlsDisplayUpdater __x_ABI_CWindows_CMedia_CISystemMediaTransportControlsDisplayUpdater;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CMedia_CISystemMediaTransportControlsDisplayUpdater ABI::Windows::Media::ISystemMediaTransportControlsDisplayUpdater
+namespace ABI {
+    namespace Windows {
+        namespace Media {
+            interface ISystemMediaTransportControlsDisplayUpdater;
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
 #ifndef ____x_ABI_CWindows_CMedia_CISystemMediaTransportControlsButtonPressedEventArgs_FWD_DEFINED__
 #define ____x_ABI_CWindows_CMedia_CISystemMediaTransportControlsButtonPressedEventArgs_FWD_DEFINED__
 typedef interface __x_ABI_CWindows_CMedia_CISystemMediaTransportControlsButtonPressedEventArgs __x_ABI_CWindows_CMedia_CISystemMediaTransportControlsButtonPressedEventArgs;
@@ -86,6 +131,36 @@
 #endif /* __cplusplus */
 #endif
 
+#ifndef ____x_ABI_CWindows_CMedia_CImageDisplayProperties_FWD_DEFINED__
+#define ____x_ABI_CWindows_CMedia_CImageDisplayProperties_FWD_DEFINED__
+#ifdef __cplusplus
+namespace ABI {
+    namespace Windows {
+        namespace Media {
+            class ImageDisplayProperties;
+        }
+    }
+}
+#else
+typedef struct __x_ABI_CWindows_CMedia_CImageDisplayProperties __x_ABI_CWindows_CMedia_CImageDisplayProperties;
+#endif /* defined __cplusplus */
+#endif /* defined ____x_ABI_CWindows_CMedia_CImageDisplayProperties_FWD_DEFINED__ */
+
+#ifndef ____x_ABI_CWindows_CMedia_CMusicDisplayProperties_FWD_DEFINED__
+#define ____x_ABI_CWindows_CMedia_CMusicDisplayProperties_FWD_DEFINED__
+#ifdef __cplusplus
+namespace ABI {
+    namespace Windows {
+        namespace Media {
+            class MusicDisplayProperties;
+        }
+    }
+}
+#else
+typedef struct __x_ABI_CWindows_CMedia_CMusicDisplayProperties __x_ABI_CWindows_CMedia_CMusicDisplayProperties;
+#endif /* defined __cplusplus */
+#endif /* defined ____x_ABI_CWindows_CMedia_CMusicDisplayProperties_FWD_DEFINED__ */
+
 #ifndef ____x_ABI_CWindows_CMedia_CSystemMediaTransportControls_FWD_DEFINED__
 #define ____x_ABI_CWindows_CMedia_CSystemMediaTransportControls_FWD_DEFINED__
 #ifdef __cplusplus
@@ -146,6 +221,21 @@
 #endif /* defined __cplusplus */
 #endif /* defined ____x_ABI_CWindows_CMedia_CSystemMediaTransportControlsPropertyChangedEventArgs_FWD_DEFINED__ */
 
+#ifndef ____x_ABI_CWindows_CMedia_CVideoDisplayProperties_FWD_DEFINED__
+#define ____x_ABI_CWindows_CMedia_CVideoDisplayProperties_FWD_DEFINED__
+#ifdef __cplusplus
+namespace ABI {
+    namespace Windows {
+        namespace Media {
+            class VideoDisplayProperties;
+        }
+    }
+}
+#else
+typedef struct __x_ABI_CWindows_CMedia_CVideoDisplayProperties __x_ABI_CWindows_CMedia_CVideoDisplayProperties;
+#endif /* defined __cplusplus */
+#endif /* defined ____x_ABI_CWindows_CMedia_CVideoDisplayProperties_FWD_DEFINED__ */
+
 #ifndef ____FIIterable_1_Windows__CMedia__CIMediaMarker_FWD_DEFINED__
 #define ____FIIterable_1_Windows__CMedia__CIMediaMarker_FWD_DEFINED__
 typedef interface __FIIterable_1_Windows__CMedia__CIMediaMarker __FIIterable_1_Windows__CMedia__CIMediaMarker;
@@ -198,6 +288,8 @@
 
 #include <inspectable.h>
 #include <windows.foundation.h>
+#include <windows.storage.h>
+#include <windows.storage.streams.h>
 
 #ifdef __cplusplus
 extern "C" {
@@ -212,6 +304,10 @@
 #endif /* __cplusplus */
 
 #ifndef __cplusplus
+typedef enum __x_ABI_CWindows_CMedia_CMediaPlaybackType __x_ABI_CWindows_CMedia_CMediaPlaybackType;
+#endif /* __cplusplus */
+
+#ifndef __cplusplus
 typedef enum __x_ABI_CWindows_CMedia_CSoundLevel __x_ABI_CWindows_CMedia_CSoundLevel;
 #endif /* __cplusplus */
 
@@ -223,6 +319,21 @@
 typedef enum __x_ABI_CWindows_CMedia_CSystemMediaTransportControlsProperty __x_ABI_CWindows_CMedia_CSystemMediaTransportControlsProperty;
 #endif /* __cplusplus */
 
+#ifndef ____x_ABI_CWindows_CMedia_CIImageDisplayProperties_FWD_DEFINED__
+#define ____x_ABI_CWindows_CMedia_CIImageDisplayProperties_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CMedia_CIImageDisplayProperties __x_ABI_CWindows_CMedia_CIImageDisplayProperties;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CMedia_CIImageDisplayProperties ABI::Windows::Media::IImageDisplayProperties
+namespace ABI {
+    namespace Windows {
+        namespace Media {
+            interface IImageDisplayProperties;
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
 #ifndef ____x_ABI_CWindows_CMedia_CIMediaControl_FWD_DEFINED__
 #define ____x_ABI_CWindows_CMedia_CIMediaControl_FWD_DEFINED__
 typedef interface __x_ABI_CWindows_CMedia_CIMediaControl __x_ABI_CWindows_CMedia_CIMediaControl;
@@ -253,6 +364,51 @@
 #endif /* __cplusplus */
 #endif
 
+#ifndef ____x_ABI_CWindows_CMedia_CIMusicDisplayProperties_FWD_DEFINED__
+#define ____x_ABI_CWindows_CMedia_CIMusicDisplayProperties_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CMedia_CIMusicDisplayProperties __x_ABI_CWindows_CMedia_CIMusicDisplayProperties;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CMedia_CIMusicDisplayProperties ABI::Windows::Media::IMusicDisplayProperties
+namespace ABI {
+    namespace Windows {
+        namespace Media {
+            interface IMusicDisplayProperties;
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CMedia_CIMusicDisplayProperties2_FWD_DEFINED__
+#define ____x_ABI_CWindows_CMedia_CIMusicDisplayProperties2_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CMedia_CIMusicDisplayProperties2 __x_ABI_CWindows_CMedia_CIMusicDisplayProperties2;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CMedia_CIMusicDisplayProperties2 ABI::Windows::Media::IMusicDisplayProperties2
+namespace ABI {
+    namespace Windows {
+        namespace Media {
+            interface IMusicDisplayProperties2;
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CMedia_CIMusicDisplayProperties3_FWD_DEFINED__
+#define ____x_ABI_CWindows_CMedia_CIMusicDisplayProperties3_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CMedia_CIMusicDisplayProperties3 __x_ABI_CWindows_CMedia_CIMusicDisplayProperties3;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CMedia_CIMusicDisplayProperties3 ABI::Windows::Media::IMusicDisplayProperties3
+namespace ABI {
+    namespace Windows {
+        namespace Media {
+            interface IMusicDisplayProperties3;
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
 #ifndef ____x_ABI_CWindows_CMedia_CISystemMediaTransportControls_FWD_DEFINED__
 #define ____x_ABI_CWindows_CMedia_CISystemMediaTransportControls_FWD_DEFINED__
 typedef interface __x_ABI_CWindows_CMedia_CISystemMediaTransportControls __x_ABI_CWindows_CMedia_CISystemMediaTransportControls;
@@ -343,6 +499,36 @@
 #endif /* __cplusplus */
 #endif
 
+#ifndef ____x_ABI_CWindows_CMedia_CIVideoDisplayProperties_FWD_DEFINED__
+#define ____x_ABI_CWindows_CMedia_CIVideoDisplayProperties_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CMedia_CIVideoDisplayProperties __x_ABI_CWindows_CMedia_CIVideoDisplayProperties;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CMedia_CIVideoDisplayProperties ABI::Windows::Media::IVideoDisplayProperties
+namespace ABI {
+    namespace Windows {
+        namespace Media {
+            interface IVideoDisplayProperties;
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CMedia_CIVideoDisplayProperties2_FWD_DEFINED__
+#define ____x_ABI_CWindows_CMedia_CIVideoDisplayProperties2_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CMedia_CIVideoDisplayProperties2 __x_ABI_CWindows_CMedia_CIVideoDisplayProperties2;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CMedia_CIVideoDisplayProperties2 ABI::Windows::Media::IVideoDisplayProperties2
+namespace ABI {
+    namespace Windows {
+        namespace Media {
+            interface IVideoDisplayProperties2;
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
 #ifndef ____FIIterable_1_Windows__CMedia__CIMediaMarker_FWD_DEFINED__
 #define ____FIIterable_1_Windows__CMedia__CIMediaMarker_FWD_DEFINED__
 typedef interface __FIIterable_1_Windows__CMedia__CIMediaMarker __FIIterable_1_Windows__CMedia__CIMediaMarker;
@@ -437,6 +623,35 @@
 namespace ABI {
     namespace Windows {
         namespace Media {
+            enum MediaPlaybackType {
+                MediaPlaybackType_Unknown = 0,
+                MediaPlaybackType_Music = 1,
+                MediaPlaybackType_Video = 2,
+                MediaPlaybackType_Image = 3
+            };
+        }
+    }
+}
+extern "C" {
+#else
+enum __x_ABI_CWindows_CMedia_CMediaPlaybackType {
+    MediaPlaybackType_Unknown = 0,
+    MediaPlaybackType_Music = 1,
+    MediaPlaybackType_Video = 2,
+    MediaPlaybackType_Image = 3
+};
+#ifdef WIDL_using_Windows_Media
+#define MediaPlaybackType __x_ABI_CWindows_CMedia_CMediaPlaybackType
+#endif /* WIDL_using_Windows_Media */
+#endif
+
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
+#ifdef __cplusplus
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace Media {
             enum SoundLevel {
                 SoundLevel_Muted = 0,
                 SoundLevel_Low = 1,
@@ -673,6 +888,366 @@
 #endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
 
 /*****************************************************************************
+ * IMusicDisplayProperties interface
+ */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
+#ifndef ____x_ABI_CWindows_CMedia_CIMusicDisplayProperties_INTERFACE_DEFINED__
+#define ____x_ABI_CWindows_CMedia_CIMusicDisplayProperties_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID___x_ABI_CWindows_CMedia_CIMusicDisplayProperties, 0x6bbf0c59, 0xd0a0, 0x4d26, 0x92,0xa0, 0xf9,0x78,0xe1,0xd1,0x8e,0x7b);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace Media {
+            MIDL_INTERFACE("6bbf0c59-d0a0-4d26-92a0-f978e1d18e7b")
+            IMusicDisplayProperties : public IInspectable
+            {
+                virtual HRESULT STDMETHODCALLTYPE get_Title(
+                    HSTRING *value) = 0;
+
+                virtual HRESULT STDMETHODCALLTYPE put_Title(
+                    HSTRING value) = 0;
+
+                virtual HRESULT STDMETHODCALLTYPE get_AlbumArtist(
+                    HSTRING *value) = 0;
+
+                virtual HRESULT STDMETHODCALLTYPE put_AlbumArtist(
+                    HSTRING value) = 0;
+
+                virtual HRESULT STDMETHODCALLTYPE get_Artist(
+                    HSTRING *value) = 0;
+
+                virtual HRESULT STDMETHODCALLTYPE put_Artist(
+                    HSTRING value) = 0;
+
+            };
+        }
+    }
+}
+extern "C" {
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(__x_ABI_CWindows_CMedia_CIMusicDisplayProperties, 0x6bbf0c59, 0xd0a0, 0x4d26, 0x92,0xa0, 0xf9,0x78,0xe1,0xd1,0x8e,0x7b)
+#endif
+#else
+typedef struct __x_ABI_CWindows_CMedia_CIMusicDisplayPropertiesVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        __x_ABI_CWindows_CMedia_CIMusicDisplayProperties *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        __x_ABI_CWindows_CMedia_CIMusicDisplayProperties *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        __x_ABI_CWindows_CMedia_CIMusicDisplayProperties *This);
+
+    /*** IInspectable methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetIids)(
+        __x_ABI_CWindows_CMedia_CIMusicDisplayProperties *This,
+        ULONG *iidCount,
+        IID **iids);
+
+    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
+        __x_ABI_CWindows_CMedia_CIMusicDisplayProperties *This,
+        HSTRING *className);
+
+    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
+        __x_ABI_CWindows_CMedia_CIMusicDisplayProperties *This,
+        TrustLevel *trustLevel);
+
+    /*** IMusicDisplayProperties methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_Title)(
+        __x_ABI_CWindows_CMedia_CIMusicDisplayProperties *This,
+        HSTRING *value);
+
+    HRESULT (STDMETHODCALLTYPE *put_Title)(
+        __x_ABI_CWindows_CMedia_CIMusicDisplayProperties *This,
+        HSTRING value);
+
+    HRESULT (STDMETHODCALLTYPE *get_AlbumArtist)(
+        __x_ABI_CWindows_CMedia_CIMusicDisplayProperties *This,
+        HSTRING *value);
+
+    HRESULT (STDMETHODCALLTYPE *put_AlbumArtist)(
+        __x_ABI_CWindows_CMedia_CIMusicDisplayProperties *This,
+        HSTRING value);
+
+    HRESULT (STDMETHODCALLTYPE *get_Artist)(
+        __x_ABI_CWindows_CMedia_CIMusicDisplayProperties *This,
+        HSTRING *value);
+
+    HRESULT (STDMETHODCALLTYPE *put_Artist)(
+        __x_ABI_CWindows_CMedia_CIMusicDisplayProperties *This,
+        HSTRING value);
+
+    END_INTERFACE
+} __x_ABI_CWindows_CMedia_CIMusicDisplayPropertiesVtbl;
+
+interface __x_ABI_CWindows_CMedia_CIMusicDisplayProperties {
+    CONST_VTBL __x_ABI_CWindows_CMedia_CIMusicDisplayPropertiesVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define __x_ABI_CWindows_CMedia_CIMusicDisplayProperties_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __x_ABI_CWindows_CMedia_CIMusicDisplayProperties_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __x_ABI_CWindows_CMedia_CIMusicDisplayProperties_Release(This) (This)->lpVtbl->Release(This)
+/*** IInspectable methods ***/
+#define __x_ABI_CWindows_CMedia_CIMusicDisplayProperties_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
+#define __x_ABI_CWindows_CMedia_CIMusicDisplayProperties_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
+#define __x_ABI_CWindows_CMedia_CIMusicDisplayProperties_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
+/*** IMusicDisplayProperties methods ***/
+#define __x_ABI_CWindows_CMedia_CIMusicDisplayProperties_get_Title(This,value) (This)->lpVtbl->get_Title(This,value)
+#define __x_ABI_CWindows_CMedia_CIMusicDisplayProperties_put_Title(This,value) (This)->lpVtbl->put_Title(This,value)
+#define __x_ABI_CWindows_CMedia_CIMusicDisplayProperties_get_AlbumArtist(This,value) (This)->lpVtbl->get_AlbumArtist(This,value)
+#define __x_ABI_CWindows_CMedia_CIMusicDisplayProperties_put_AlbumArtist(This,value) (This)->lpVtbl->put_AlbumArtist(This,value)
+#define __x_ABI_CWindows_CMedia_CIMusicDisplayProperties_get_Artist(This,value) (This)->lpVtbl->get_Artist(This,value)
+#define __x_ABI_CWindows_CMedia_CIMusicDisplayProperties_put_Artist(This,value) (This)->lpVtbl->put_Artist(This,value)
+#else
+/*** IUnknown methods ***/
+static __WIDL_INLINE HRESULT __x_ABI_CWindows_CMedia_CIMusicDisplayProperties_QueryInterface(__x_ABI_CWindows_CMedia_CIMusicDisplayProperties* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static __WIDL_INLINE ULONG __x_ABI_CWindows_CMedia_CIMusicDisplayProperties_AddRef(__x_ABI_CWindows_CMedia_CIMusicDisplayProperties* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static __WIDL_INLINE ULONG __x_ABI_CWindows_CMedia_CIMusicDisplayProperties_Release(__x_ABI_CWindows_CMedia_CIMusicDisplayProperties* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IInspectable methods ***/
+static __WIDL_INLINE HRESULT __x_ABI_CWindows_CMedia_CIMusicDisplayProperties_GetIids(__x_ABI_CWindows_CMedia_CIMusicDisplayProperties* This,ULONG *iidCount,IID **iids) {
+    return This->lpVtbl->GetIids(This,iidCount,iids);
+}
+static __WIDL_INLINE HRESULT __x_ABI_CWindows_CMedia_CIMusicDisplayProperties_GetRuntimeClassName(__x_ABI_CWindows_CMedia_CIMusicDisplayProperties* This,HSTRING *className) {
+    return This->lpVtbl->GetRuntimeClassName(This,className);
+}
+static __WIDL_INLINE HRESULT __x_ABI_CWindows_CMedia_CIMusicDisplayProperties_GetTrustLevel(__x_ABI_CWindows_CMedia_CIMusicDisplayProperties* This,TrustLevel *trustLevel) {
+    return This->lpVtbl->GetTrustLevel(This,trustLevel);
+}
+/*** IMusicDisplayProperties methods ***/
+static __WIDL_INLINE HRESULT __x_ABI_CWindows_CMedia_CIMusicDisplayProperties_get_Title(__x_ABI_CWindows_CMedia_CIMusicDisplayProperties* This,HSTRING *value) {
+    return This->lpVtbl->get_Title(This,value);
+}
+static __WIDL_INLINE HRESULT __x_ABI_CWindows_CMedia_CIMusicDisplayProperties_put_Title(__x_ABI_CWindows_CMedia_CIMusicDisplayProperties* This,HSTRING value) {
+    return This->lpVtbl->put_Title(This,value);
+}
+static __WIDL_INLINE HRESULT __x_ABI_CWindows_CMedia_CIMusicDisplayProperties_get_AlbumArtist(__x_ABI_CWindows_CMedia_CIMusicDisplayProperties* This,HSTRING *value) {
+    return This->lpVtbl->get_AlbumArtist(This,value);
+}
+static __WIDL_INLINE HRESULT __x_ABI_CWindows_CMedia_CIMusicDisplayProperties_put_AlbumArtist(__x_ABI_CWindows_CMedia_CIMusicDisplayProperties* This,HSTRING value) {
+    return This->lpVtbl->put_AlbumArtist(This,value);
+}
+static __WIDL_INLINE HRESULT __x_ABI_CWindows_CMedia_CIMusicDisplayProperties_get_Artist(__x_ABI_CWindows_CMedia_CIMusicDisplayProperties* This,HSTRING *value) {
+    return This->lpVtbl->get_Artist(This,value);
+}
+static __WIDL_INLINE HRESULT __x_ABI_CWindows_CMedia_CIMusicDisplayProperties_put_Artist(__x_ABI_CWindows_CMedia_CIMusicDisplayProperties* This,HSTRING value) {
+    return This->lpVtbl->put_Artist(This,value);
+}
+#endif
+#ifdef WIDL_using_Windows_Media
+#define IID_IMusicDisplayProperties IID___x_ABI_CWindows_CMedia_CIMusicDisplayProperties
+#define IMusicDisplayPropertiesVtbl __x_ABI_CWindows_CMedia_CIMusicDisplayPropertiesVtbl
+#define IMusicDisplayProperties __x_ABI_CWindows_CMedia_CIMusicDisplayProperties
+#define IMusicDisplayProperties_QueryInterface __x_ABI_CWindows_CMedia_CIMusicDisplayProperties_QueryInterface
+#define IMusicDisplayProperties_AddRef __x_ABI_CWindows_CMedia_CIMusicDisplayProperties_AddRef
+#define IMusicDisplayProperties_Release __x_ABI_CWindows_CMedia_CIMusicDisplayProperties_Release
+#define IMusicDisplayProperties_GetIids __x_ABI_CWindows_CMedia_CIMusicDisplayProperties_GetIids
+#define IMusicDisplayProperties_GetRuntimeClassName __x_ABI_CWindows_CMedia_CIMusicDisplayProperties_GetRuntimeClassName
+#define IMusicDisplayProperties_GetTrustLevel __x_ABI_CWindows_CMedia_CIMusicDisplayProperties_GetTrustLevel
+#define IMusicDisplayProperties_get_Title __x_ABI_CWindows_CMedia_CIMusicDisplayProperties_get_Title
+#define IMusicDisplayProperties_put_Title __x_ABI_CWindows_CMedia_CIMusicDisplayProperties_put_Title
+#define IMusicDisplayProperties_get_AlbumArtist __x_ABI_CWindows_CMedia_CIMusicDisplayProperties_get_AlbumArtist
+#define IMusicDisplayProperties_put_AlbumArtist __x_ABI_CWindows_CMedia_CIMusicDisplayProperties_put_AlbumArtist
+#define IMusicDisplayProperties_get_Artist __x_ABI_CWindows_CMedia_CIMusicDisplayProperties_get_Artist
+#define IMusicDisplayProperties_put_Artist __x_ABI_CWindows_CMedia_CIMusicDisplayProperties_put_Artist
+#endif /* WIDL_using_Windows_Media */
+#endif
+
+#endif
+
+#endif  /* ____x_ABI_CWindows_CMedia_CIMusicDisplayProperties_INTERFACE_DEFINED__ */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
+
+/*****************************************************************************
+ * IMusicDisplayProperties2 interface
+ */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
+#ifndef ____x_ABI_CWindows_CMedia_CIMusicDisplayProperties2_INTERFACE_DEFINED__
+#define ____x_ABI_CWindows_CMedia_CIMusicDisplayProperties2_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID___x_ABI_CWindows_CMedia_CIMusicDisplayProperties2, 0x00368462, 0x97d3, 0x44b9, 0xb0,0x0f, 0x00,0x8a,0xfc,0xef,0xaf,0x18);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace Media {
+            MIDL_INTERFACE("00368462-97d3-44b9-b00f-008afcefaf18")
+            IMusicDisplayProperties2 : public IInspectable
+            {
+                virtual HRESULT STDMETHODCALLTYPE get_AlbumTitle(
+                    HSTRING *value) = 0;
+
+                virtual HRESULT STDMETHODCALLTYPE put_AlbumTitle(
+                    HSTRING value) = 0;
+
+                virtual HRESULT STDMETHODCALLTYPE get_TrackNumber(
+                    UINT32 *value) = 0;
+
+                virtual HRESULT STDMETHODCALLTYPE put_TrackNumber(
+                    UINT32 value) = 0;
+
+                virtual HRESULT STDMETHODCALLTYPE get_Genres(
+                    ABI::Windows::Foundation::Collections::IVector<HSTRING > **value) = 0;
+
+            };
+        }
+    }
+}
+extern "C" {
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(__x_ABI_CWindows_CMedia_CIMusicDisplayProperties2, 0x00368462, 0x97d3, 0x44b9, 0xb0,0x0f, 0x00,0x8a,0xfc,0xef,0xaf,0x18)
+#endif
+#else
+typedef struct __x_ABI_CWindows_CMedia_CIMusicDisplayProperties2Vtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        __x_ABI_CWindows_CMedia_CIMusicDisplayProperties2 *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        __x_ABI_CWindows_CMedia_CIMusicDisplayProperties2 *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        __x_ABI_CWindows_CMedia_CIMusicDisplayProperties2 *This);
+
+    /*** IInspectable methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetIids)(
+        __x_ABI_CWindows_CMedia_CIMusicDisplayProperties2 *This,
+        ULONG *iidCount,
+        IID **iids);
+
+    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
+        __x_ABI_CWindows_CMedia_CIMusicDisplayProperties2 *This,
+        HSTRING *className);
+
+    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
+        __x_ABI_CWindows_CMedia_CIMusicDisplayProperties2 *This,
+        TrustLevel *trustLevel);
+
+    /*** IMusicDisplayProperties2 methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_AlbumTitle)(
+        __x_ABI_CWindows_CMedia_CIMusicDisplayProperties2 *This,
+        HSTRING *value);
+
+    HRESULT (STDMETHODCALLTYPE *put_AlbumTitle)(
+        __x_ABI_CWindows_CMedia_CIMusicDisplayProperties2 *This,
+        HSTRING value);
+
+    HRESULT (STDMETHODCALLTYPE *get_TrackNumber)(
+        __x_ABI_CWindows_CMedia_CIMusicDisplayProperties2 *This,
+        UINT32 *value);
+
+    HRESULT (STDMETHODCALLTYPE *put_TrackNumber)(
+        __x_ABI_CWindows_CMedia_CIMusicDisplayProperties2 *This,
+        UINT32 value);
+
+    HRESULT (STDMETHODCALLTYPE *get_Genres)(
+        __x_ABI_CWindows_CMedia_CIMusicDisplayProperties2 *This,
+        __FIVector_1_HSTRING **value);
+
+    END_INTERFACE
+} __x_ABI_CWindows_CMedia_CIMusicDisplayProperties2Vtbl;
+
+interface __x_ABI_CWindows_CMedia_CIMusicDisplayProperties2 {
+    CONST_VTBL __x_ABI_CWindows_CMedia_CIMusicDisplayProperties2Vtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define __x_ABI_CWindows_CMedia_CIMusicDisplayProperties2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __x_ABI_CWindows_CMedia_CIMusicDisplayProperties2_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __x_ABI_CWindows_CMedia_CIMusicDisplayProperties2_Release(This) (This)->lpVtbl->Release(This)
+/*** IInspectable methods ***/
+#define __x_ABI_CWindows_CMedia_CIMusicDisplayProperties2_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
+#define __x_ABI_CWindows_CMedia_CIMusicDisplayProperties2_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
+#define __x_ABI_CWindows_CMedia_CIMusicDisplayProperties2_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
+/*** IMusicDisplayProperties2 methods ***/
+#define __x_ABI_CWindows_CMedia_CIMusicDisplayProperties2_get_AlbumTitle(This,value) (This)->lpVtbl->get_AlbumTitle(This,value)
+#define __x_ABI_CWindows_CMedia_CIMusicDisplayProperties2_put_AlbumTitle(This,value) (This)->lpVtbl->put_AlbumTitle(This,value)
+#define __x_ABI_CWindows_CMedia_CIMusicDisplayProperties2_get_TrackNumber(This,value) (This)->lpVtbl->get_TrackNumber(This,value)
+#define __x_ABI_CWindows_CMedia_CIMusicDisplayProperties2_put_TrackNumber(This,value) (This)->lpVtbl->put_TrackNumber(This,value)
+#define __x_ABI_CWindows_CMedia_CIMusicDisplayProperties2_get_Genres(This,value) (This)->lpVtbl->get_Genres(This,value)
+#else
+/*** IUnknown methods ***/
+static __WIDL_INLINE HRESULT __x_ABI_CWindows_CMedia_CIMusicDisplayProperties2_QueryInterface(__x_ABI_CWindows_CMedia_CIMusicDisplayProperties2* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static __WIDL_INLINE ULONG __x_ABI_CWindows_CMedia_CIMusicDisplayProperties2_AddRef(__x_ABI_CWindows_CMedia_CIMusicDisplayProperties2* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static __WIDL_INLINE ULONG __x_ABI_CWindows_CMedia_CIMusicDisplayProperties2_Release(__x_ABI_CWindows_CMedia_CIMusicDisplayProperties2* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IInspectable methods ***/
+static __WIDL_INLINE HRESULT __x_ABI_CWindows_CMedia_CIMusicDisplayProperties2_GetIids(__x_ABI_CWindows_CMedia_CIMusicDisplayProperties2* This,ULONG *iidCount,IID **iids) {
+    return This->lpVtbl->GetIids(This,iidCount,iids);
+}
+static __WIDL_INLINE HRESULT __x_ABI_CWindows_CMedia_CIMusicDisplayProperties2_GetRuntimeClassName(__x_ABI_CWindows_CMedia_CIMusicDisplayProperties2* This,HSTRING *className) {
+    return This->lpVtbl->GetRuntimeClassName(This,className);
+}
+static __WIDL_INLINE HRESULT __x_ABI_CWindows_CMedia_CIMusicDisplayProperties2_GetTrustLevel(__x_ABI_CWindows_CMedia_CIMusicDisplayProperties2* This,TrustLevel *trustLevel) {
+    return This->lpVtbl->GetTrustLevel(This,trustLevel);
+}
+/*** IMusicDisplayProperties2 methods ***/
+static __WIDL_INLINE HRESULT __x_ABI_CWindows_CMedia_CIMusicDisplayProperties2_get_AlbumTitle(__x_ABI_CWindows_CMedia_CIMusicDisplayProperties2* This,HSTRING *value) {
+    return This->lpVtbl->get_AlbumTitle(This,value);
+}
+static __WIDL_INLINE HRESULT __x_ABI_CWindows_CMedia_CIMusicDisplayProperties2_put_AlbumTitle(__x_ABI_CWindows_CMedia_CIMusicDisplayProperties2* This,HSTRING value) {
+    return This->lpVtbl->put_AlbumTitle(This,value);
+}
+static __WIDL_INLINE HRESULT __x_ABI_CWindows_CMedia_CIMusicDisplayProperties2_get_TrackNumber(__x_ABI_CWindows_CMedia_CIMusicDisplayProperties2* This,UINT32 *value) {
+    return This->lpVtbl->get_TrackNumber(This,value);
+}
+static __WIDL_INLINE HRESULT __x_ABI_CWindows_CMedia_CIMusicDisplayProperties2_put_TrackNumber(__x_ABI_CWindows_CMedia_CIMusicDisplayProperties2* This,UINT32 value) {
+    return This->lpVtbl->put_TrackNumber(This,value);
+}
+static __WIDL_INLINE HRESULT __x_ABI_CWindows_CMedia_CIMusicDisplayProperties2_get_Genres(__x_ABI_CWindows_CMedia_CIMusicDisplayProperties2* This,__FIVector_1_HSTRING **value) {
+    return This->lpVtbl->get_Genres(This,value);
+}
+#endif
+#ifdef WIDL_using_Windows_Media
+#define IID_IMusicDisplayProperties2 IID___x_ABI_CWindows_CMedia_CIMusicDisplayProperties2
+#define IMusicDisplayProperties2Vtbl __x_ABI_CWindows_CMedia_CIMusicDisplayProperties2Vtbl
+#define IMusicDisplayProperties2 __x_ABI_CWindows_CMedia_CIMusicDisplayProperties2
+#define IMusicDisplayProperties2_QueryInterface __x_ABI_CWindows_CMedia_CIMusicDisplayProperties2_QueryInterface
+#define IMusicDisplayProperties2_AddRef __x_ABI_CWindows_CMedia_CIMusicDisplayProperties2_AddRef
+#define IMusicDisplayProperties2_Release __x_ABI_CWindows_CMedia_CIMusicDisplayProperties2_Release
+#define IMusicDisplayProperties2_GetIids __x_ABI_CWindows_CMedia_CIMusicDisplayProperties2_GetIids
+#define IMusicDisplayProperties2_GetRuntimeClassName __x_ABI_CWindows_CMedia_CIMusicDisplayProperties2_GetRuntimeClassName
+#define IMusicDisplayProperties2_GetTrustLevel __x_ABI_CWindows_CMedia_CIMusicDisplayProperties2_GetTrustLevel
+#define IMusicDisplayProperties2_get_AlbumTitle __x_ABI_CWindows_CMedia_CIMusicDisplayProperties2_get_AlbumTitle
+#define IMusicDisplayProperties2_put_AlbumTitle __x_ABI_CWindows_CMedia_CIMusicDisplayProperties2_put_AlbumTitle
+#define IMusicDisplayProperties2_get_TrackNumber __x_ABI_CWindows_CMedia_CIMusicDisplayProperties2_get_TrackNumber
+#define IMusicDisplayProperties2_put_TrackNumber __x_ABI_CWindows_CMedia_CIMusicDisplayProperties2_put_TrackNumber
+#define IMusicDisplayProperties2_get_Genres __x_ABI_CWindows_CMedia_CIMusicDisplayProperties2_get_Genres
+#endif /* WIDL_using_Windows_Media */
+#endif
+
+#endif
+
+#endif  /* ____x_ABI_CWindows_CMedia_CIMusicDisplayProperties2_INTERFACE_DEFINED__ */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
+
+/*****************************************************************************
  * ISystemMediaTransportControls interface
  */
 #if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
@@ -1151,6 +1726,266 @@
 #endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
 
 /*****************************************************************************
+ * ISystemMediaTransportControlsDisplayUpdater interface
+ */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
+#ifndef ____x_ABI_CWindows_CMedia_CISystemMediaTransportControlsDisplayUpdater_INTERFACE_DEFINED__
+#define ____x_ABI_CWindows_CMedia_CISystemMediaTransportControlsDisplayUpdater_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID___x_ABI_CWindows_CMedia_CISystemMediaTransportControlsDisplayUpdater, 0x8abbc53e, 0xfa55, 0x4ecf, 0xad,0x8e, 0xc9,0x84,0xe5,0xdd,0x15,0x50);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace Media {
+            MIDL_INTERFACE("8abbc53e-fa55-4ecf-ad8e-c984e5dd1550")
+            ISystemMediaTransportControlsDisplayUpdater : public IInspectable
+            {
+                virtual HRESULT STDMETHODCALLTYPE get_Type(
+                    enum MediaPlaybackType *value) = 0;
+
+                virtual HRESULT STDMETHODCALLTYPE put_Type(
+                    enum MediaPlaybackType value) = 0;
+
+                virtual HRESULT STDMETHODCALLTYPE get_AppMediaId(
+                    HSTRING *value) = 0;
+
+                virtual HRESULT STDMETHODCALLTYPE put_AppMediaId(
+                    HSTRING value) = 0;
+
+                virtual HRESULT STDMETHODCALLTYPE get_Thumbnail(
+                    ABI::Windows::Storage::Streams::IRandomAccessStreamReference **value) = 0;
+
+                virtual HRESULT STDMETHODCALLTYPE put_Thumbnail(
+                    ABI::Windows::Storage::Streams::IRandomAccessStreamReference *value) = 0;
+
+                virtual HRESULT STDMETHODCALLTYPE get_MusicProperties(
+                    ABI::Windows::Media::IMusicDisplayProperties **value) = 0;
+
+                virtual HRESULT STDMETHODCALLTYPE get_VideoProperties(
+                    ABI::Windows::Media::IVideoDisplayProperties **value) = 0;
+
+                virtual HRESULT STDMETHODCALLTYPE get_ImageProperties(
+                    ABI::Windows::Media::IImageDisplayProperties **value) = 0;
+
+                virtual HRESULT STDMETHODCALLTYPE CopyFromFileAsync(
+                    enum MediaPlaybackType type,
+                    ABI::Windows::Storage::IStorageFile *source,
+                    ABI::Windows::Foundation::IAsyncOperation<boolean > **operation) = 0;
+
+                virtual HRESULT STDMETHODCALLTYPE ClearAll(
+                    ) = 0;
+
+                virtual HRESULT STDMETHODCALLTYPE Update(
+                    ) = 0;
+
+            };
+        }
+    }
+}
+extern "C" {
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(__x_ABI_CWindows_CMedia_CISystemMediaTransportControlsDisplayUpdater, 0x8abbc53e, 0xfa55, 0x4ecf, 0xad,0x8e, 0xc9,0x84,0xe5,0xdd,0x15,0x50)
+#endif
+#else
+typedef struct __x_ABI_CWindows_CMedia_CISystemMediaTransportControlsDisplayUpdaterVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        __x_ABI_CWindows_CMedia_CISystemMediaTransportControlsDisplayUpdater *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        __x_ABI_CWindows_CMedia_CISystemMediaTransportControlsDisplayUpdater *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        __x_ABI_CWindows_CMedia_CISystemMediaTransportControlsDisplayUpdater *This);
+
+    /*** IInspectable methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetIids)(
+        __x_ABI_CWindows_CMedia_CISystemMediaTransportControlsDisplayUpdater *This,
+        ULONG *iidCount,
+        IID **iids);
+
+    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
+        __x_ABI_CWindows_CMedia_CISystemMediaTransportControlsDisplayUpdater *This,
+        HSTRING *className);
+
+    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
+        __x_ABI_CWindows_CMedia_CISystemMediaTransportControlsDisplayUpdater *This,
+        TrustLevel *trustLevel);
+
+    /*** ISystemMediaTransportControlsDisplayUpdater methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_Type)(
+        __x_ABI_CWindows_CMedia_CISystemMediaTransportControlsDisplayUpdater *This,
+        enum __x_ABI_CWindows_CMedia_CMediaPlaybackType *value);
+
+    HRESULT (STDMETHODCALLTYPE *put_Type)(
+        __x_ABI_CWindows_CMedia_CISystemMediaTransportControlsDisplayUpdater *This,
+        enum __x_ABI_CWindows_CMedia_CMediaPlaybackType value);
+
+    HRESULT (STDMETHODCALLTYPE *get_AppMediaId)(
+        __x_ABI_CWindows_CMedia_CISystemMediaTransportControlsDisplayUpdater *This,
+        HSTRING *value);
+
+    HRESULT (STDMETHODCALLTYPE *put_AppMediaId)(
+        __x_ABI_CWindows_CMedia_CISystemMediaTransportControlsDisplayUpdater *This,
+        HSTRING value);
+
+    HRESULT (STDMETHODCALLTYPE *get_Thumbnail)(
+        __x_ABI_CWindows_CMedia_CISystemMediaTransportControlsDisplayUpdater *This,
+        __x_ABI_CWindows_CStorage_CStreams_CIRandomAccessStreamReference **value);
+
+    HRESULT (STDMETHODCALLTYPE *put_Thumbnail)(
+        __x_ABI_CWindows_CMedia_CISystemMediaTransportControlsDisplayUpdater *This,
+        __x_ABI_CWindows_CStorage_CStreams_CIRandomAccessStreamReference *value);
+
+    HRESULT (STDMETHODCALLTYPE *get_MusicProperties)(
+        __x_ABI_CWindows_CMedia_CISystemMediaTransportControlsDisplayUpdater *This,
+        __x_ABI_CWindows_CMedia_CIMusicDisplayProperties **value);
+
+    HRESULT (STDMETHODCALLTYPE *get_VideoProperties)(
+        __x_ABI_CWindows_CMedia_CISystemMediaTransportControlsDisplayUpdater *This,
+        __x_ABI_CWindows_CMedia_CIVideoDisplayProperties **value);
+
+    HRESULT (STDMETHODCALLTYPE *get_ImageProperties)(
+        __x_ABI_CWindows_CMedia_CISystemMediaTransportControlsDisplayUpdater *This,
+        __x_ABI_CWindows_CMedia_CIImageDisplayProperties **value);
+
+    HRESULT (STDMETHODCALLTYPE *CopyFromFileAsync)(
+        __x_ABI_CWindows_CMedia_CISystemMediaTransportControlsDisplayUpdater *This,
+        enum __x_ABI_CWindows_CMedia_CMediaPlaybackType type,
+        __x_ABI_CWindows_CStorage_CIStorageFile *source,
+        __FIAsyncOperation_1_boolean **operation);
+
+    HRESULT (STDMETHODCALLTYPE *ClearAll)(
+        __x_ABI_CWindows_CMedia_CISystemMediaTransportControlsDisplayUpdater *This);
+
+    HRESULT (STDMETHODCALLTYPE *Update)(
+        __x_ABI_CWindows_CMedia_CISystemMediaTransportControlsDisplayUpdater *This);
+
+    END_INTERFACE
+} __x_ABI_CWindows_CMedia_CISystemMediaTransportControlsDisplayUpdaterVtbl;
+
+interface __x_ABI_CWindows_CMedia_CISystemMediaTransportControlsDisplayUpdater {
+    CONST_VTBL __x_ABI_CWindows_CMedia_CISystemMediaTransportControlsDisplayUpdaterVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define __x_ABI_CWindows_CMedia_CISystemMediaTransportControlsDisplayUpdater_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __x_ABI_CWindows_CMedia_CISystemMediaTransportControlsDisplayUpdater_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __x_ABI_CWindows_CMedia_CISystemMediaTransportControlsDisplayUpdater_Release(This) (This)->lpVtbl->Release(This)
+/*** IInspectable methods ***/
+#define __x_ABI_CWindows_CMedia_CISystemMediaTransportControlsDisplayUpdater_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
+#define __x_ABI_CWindows_CMedia_CISystemMediaTransportControlsDisplayUpdater_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
+#define __x_ABI_CWindows_CMedia_CISystemMediaTransportControlsDisplayUpdater_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
+/*** ISystemMediaTransportControlsDisplayUpdater methods ***/
+#define __x_ABI_CWindows_CMedia_CISystemMediaTransportControlsDisplayUpdater_get_Type(This,value) (This)->lpVtbl->get_Type(This,value)
+#define __x_ABI_CWindows_CMedia_CISystemMediaTransportControlsDisplayUpdater_put_Type(This,value) (This)->lpVtbl->put_Type(This,value)
+#define __x_ABI_CWindows_CMedia_CISystemMediaTransportControlsDisplayUpdater_get_AppMediaId(This,value) (This)->lpVtbl->get_AppMediaId(This,value)
+#define __x_ABI_CWindows_CMedia_CISystemMediaTransportControlsDisplayUpdater_put_AppMediaId(This,value) (This)->lpVtbl->put_AppMediaId(This,value)
+#define __x_ABI_CWindows_CMedia_CISystemMediaTransportControlsDisplayUpdater_get_Thumbnail(This,value) (This)->lpVtbl->get_Thumbnail(This,value)
+#define __x_ABI_CWindows_CMedia_CISystemMediaTransportControlsDisplayUpdater_put_Thumbnail(This,value) (This)->lpVtbl->put_Thumbnail(This,value)
+#define __x_ABI_CWindows_CMedia_CISystemMediaTransportControlsDisplayUpdater_get_MusicProperties(This,value) (This)->lpVtbl->get_MusicProperties(This,value)
+#define __x_ABI_CWindows_CMedia_CISystemMediaTransportControlsDisplayUpdater_get_VideoProperties(This,value) (This)->lpVtbl->get_VideoProperties(This,value)
+#define __x_ABI_CWindows_CMedia_CISystemMediaTransportControlsDisplayUpdater_get_ImageProperties(This,value) (This)->lpVtbl->get_ImageProperties(This,value)
+#define __x_ABI_CWindows_CMedia_CISystemMediaTransportControlsDisplayUpdater_CopyFromFileAsync(This,type,source,operation) (This)->lpVtbl->CopyFromFileAsync(This,type,source,operation)
+#define __x_ABI_CWindows_CMedia_CISystemMediaTransportControlsDisplayUpdater_ClearAll(This) (This)->lpVtbl->ClearAll(This)
+#define __x_ABI_CWindows_CMedia_CISystemMediaTransportControlsDisplayUpdater_Update(This) (This)->lpVtbl->Update(This)
+#else
+/*** IUnknown methods ***/
+static __WIDL_INLINE HRESULT __x_ABI_CWindows_CMedia_CISystemMediaTransportControlsDisplayUpdater_QueryInterface(__x_ABI_CWindows_CMedia_CISystemMediaTransportControlsDisplayUpdater* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static __WIDL_INLINE ULONG __x_ABI_CWindows_CMedia_CISystemMediaTransportControlsDisplayUpdater_AddRef(__x_ABI_CWindows_CMedia_CISystemMediaTransportControlsDisplayUpdater* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static __WIDL_INLINE ULONG __x_ABI_CWindows_CMedia_CISystemMediaTransportControlsDisplayUpdater_Release(__x_ABI_CWindows_CMedia_CISystemMediaTransportControlsDisplayUpdater* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IInspectable methods ***/
+static __WIDL_INLINE HRESULT __x_ABI_CWindows_CMedia_CISystemMediaTransportControlsDisplayUpdater_GetIids(__x_ABI_CWindows_CMedia_CISystemMediaTransportControlsDisplayUpdater* This,ULONG *iidCount,IID **iids) {
+    return This->lpVtbl->GetIids(This,iidCount,iids);
+}
+static __WIDL_INLINE HRESULT __x_ABI_CWindows_CMedia_CISystemMediaTransportControlsDisplayUpdater_GetRuntimeClassName(__x_ABI_CWindows_CMedia_CISystemMediaTransportControlsDisplayUpdater* This,HSTRING *className) {
+    return This->lpVtbl->GetRuntimeClassName(This,className);
+}
+static __WIDL_INLINE HRESULT __x_ABI_CWindows_CMedia_CISystemMediaTransportControlsDisplayUpdater_GetTrustLevel(__x_ABI_CWindows_CMedia_CISystemMediaTransportControlsDisplayUpdater* This,TrustLevel *trustLevel) {
+    return This->lpVtbl->GetTrustLevel(This,trustLevel);
+}
+/*** ISystemMediaTransportControlsDisplayUpdater methods ***/
+static __WIDL_INLINE HRESULT __x_ABI_CWindows_CMedia_CISystemMediaTransportControlsDisplayUpdater_get_Type(__x_ABI_CWindows_CMedia_CISystemMediaTransportControlsDisplayUpdater* This,enum __x_ABI_CWindows_CMedia_CMediaPlaybackType *value) {
+    return This->lpVtbl->get_Type(This,value);
+}
+static __WIDL_INLINE HRESULT __x_ABI_CWindows_CMedia_CISystemMediaTransportControlsDisplayUpdater_put_Type(__x_ABI_CWindows_CMedia_CISystemMediaTransportControlsDisplayUpdater* This,enum __x_ABI_CWindows_CMedia_CMediaPlaybackType value) {
+    return This->lpVtbl->put_Type(This,value);
+}
+static __WIDL_INLINE HRESULT __x_ABI_CWindows_CMedia_CISystemMediaTransportControlsDisplayUpdater_get_AppMediaId(__x_ABI_CWindows_CMedia_CISystemMediaTransportControlsDisplayUpdater* This,HSTRING *value) {
+    return This->lpVtbl->get_AppMediaId(This,value);
+}
+static __WIDL_INLINE HRESULT __x_ABI_CWindows_CMedia_CISystemMediaTransportControlsDisplayUpdater_put_AppMediaId(__x_ABI_CWindows_CMedia_CISystemMediaTransportControlsDisplayUpdater* This,HSTRING value) {
+    return This->lpVtbl->put_AppMediaId(This,value);
+}
+static __WIDL_INLINE HRESULT __x_ABI_CWindows_CMedia_CISystemMediaTransportControlsDisplayUpdater_get_Thumbnail(__x_ABI_CWindows_CMedia_CISystemMediaTransportControlsDisplayUpdater* This,__x_ABI_CWindows_CStorage_CStreams_CIRandomAccessStreamReference **value) {
+    return This->lpVtbl->get_Thumbnail(This,value);
+}
+static __WIDL_INLINE HRESULT __x_ABI_CWindows_CMedia_CISystemMediaTransportControlsDisplayUpdater_put_Thumbnail(__x_ABI_CWindows_CMedia_CISystemMediaTransportControlsDisplayUpdater* This,__x_ABI_CWindows_CStorage_CStreams_CIRandomAccessStreamReference *value) {
+    return This->lpVtbl->put_Thumbnail(This,value);
+}
+static __WIDL_INLINE HRESULT __x_ABI_CWindows_CMedia_CISystemMediaTransportControlsDisplayUpdater_get_MusicProperties(__x_ABI_CWindows_CMedia_CISystemMediaTransportControlsDisplayUpdater* This,__x_ABI_CWindows_CMedia_CIMusicDisplayProperties **value) {
+    return This->lpVtbl->get_MusicProperties(This,value);
+}
+static __WIDL_INLINE HRESULT __x_ABI_CWindows_CMedia_CISystemMediaTransportControlsDisplayUpdater_get_VideoProperties(__x_ABI_CWindows_CMedia_CISystemMediaTransportControlsDisplayUpdater* This,__x_ABI_CWindows_CMedia_CIVideoDisplayProperties **value) {
+    return This->lpVtbl->get_VideoProperties(This,value);
+}
+static __WIDL_INLINE HRESULT __x_ABI_CWindows_CMedia_CISystemMediaTransportControlsDisplayUpdater_get_ImageProperties(__x_ABI_CWindows_CMedia_CISystemMediaTransportControlsDisplayUpdater* This,__x_ABI_CWindows_CMedia_CIImageDisplayProperties **value) {
+    return This->lpVtbl->get_ImageProperties(This,value);
+}
+static __WIDL_INLINE HRESULT __x_ABI_CWindows_CMedia_CISystemMediaTransportControlsDisplayUpdater_CopyFromFileAsync(__x_ABI_CWindows_CMedia_CISystemMediaTransportControlsDisplayUpdater* This,enum __x_ABI_CWindows_CMedia_CMediaPlaybackType type,__x_ABI_CWindows_CStorage_CIStorageFile *source,__FIAsyncOperation_1_boolean **operation) {
+    return This->lpVtbl->CopyFromFileAsync(This,type,source,operation);
+}
+static __WIDL_INLINE HRESULT __x_ABI_CWindows_CMedia_CISystemMediaTransportControlsDisplayUpdater_ClearAll(__x_ABI_CWindows_CMedia_CISystemMediaTransportControlsDisplayUpdater* This) {
+    return This->lpVtbl->ClearAll(This);
+}
+static __WIDL_INLINE HRESULT __x_ABI_CWindows_CMedia_CISystemMediaTransportControlsDisplayUpdater_Update(__x_ABI_CWindows_CMedia_CISystemMediaTransportControlsDisplayUpdater* This) {
+    return This->lpVtbl->Update(This);
+}
+#endif
+#ifdef WIDL_using_Windows_Media
+#define IID_ISystemMediaTransportControlsDisplayUpdater IID___x_ABI_CWindows_CMedia_CISystemMediaTransportControlsDisplayUpdater
+#define ISystemMediaTransportControlsDisplayUpdaterVtbl __x_ABI_CWindows_CMedia_CISystemMediaTransportControlsDisplayUpdaterVtbl
+#define ISystemMediaTransportControlsDisplayUpdater __x_ABI_CWindows_CMedia_CISystemMediaTransportControlsDisplayUpdater
+#define ISystemMediaTransportControlsDisplayUpdater_QueryInterface __x_ABI_CWindows_CMedia_CISystemMediaTransportControlsDisplayUpdater_QueryInterface
+#define ISystemMediaTransportControlsDisplayUpdater_AddRef __x_ABI_CWindows_CMedia_CISystemMediaTransportControlsDisplayUpdater_AddRef
+#define ISystemMediaTransportControlsDisplayUpdater_Release __x_ABI_CWindows_CMedia_CISystemMediaTransportControlsDisplayUpdater_Release
+#define ISystemMediaTransportControlsDisplayUpdater_GetIids __x_ABI_CWindows_CMedia_CISystemMediaTransportControlsDisplayUpdater_GetIids
+#define ISystemMediaTransportControlsDisplayUpdater_GetRuntimeClassName __x_ABI_CWindows_CMedia_CISystemMediaTransportControlsDisplayUpdater_GetRuntimeClassName
+#define ISystemMediaTransportControlsDisplayUpdater_GetTrustLevel __x_ABI_CWindows_CMedia_CISystemMediaTransportControlsDisplayUpdater_GetTrustLevel
+#define ISystemMediaTransportControlsDisplayUpdater_get_Type __x_ABI_CWindows_CMedia_CISystemMediaTransportControlsDisplayUpdater_get_Type
+#define ISystemMediaTransportControlsDisplayUpdater_put_Type __x_ABI_CWindows_CMedia_CISystemMediaTransportControlsDisplayUpdater_put_Type
+#define ISystemMediaTransportControlsDisplayUpdater_get_AppMediaId __x_ABI_CWindows_CMedia_CISystemMediaTransportControlsDisplayUpdater_get_AppMediaId
+#define ISystemMediaTransportControlsDisplayUpdater_put_AppMediaId __x_ABI_CWindows_CMedia_CISystemMediaTransportControlsDisplayUpdater_put_AppMediaId
+#define ISystemMediaTransportControlsDisplayUpdater_get_Thumbnail __x_ABI_CWindows_CMedia_CISystemMediaTransportControlsDisplayUpdater_get_Thumbnail
+#define ISystemMediaTransportControlsDisplayUpdater_put_Thumbnail __x_ABI_CWindows_CMedia_CISystemMediaTransportControlsDisplayUpdater_put_Thumbnail
+#define ISystemMediaTransportControlsDisplayUpdater_get_MusicProperties __x_ABI_CWindows_CMedia_CISystemMediaTransportControlsDisplayUpdater_get_MusicProperties
+#define ISystemMediaTransportControlsDisplayUpdater_get_VideoProperties __x_ABI_CWindows_CMedia_CISystemMediaTransportControlsDisplayUpdater_get_VideoProperties
+#define ISystemMediaTransportControlsDisplayUpdater_get_ImageProperties __x_ABI_CWindows_CMedia_CISystemMediaTransportControlsDisplayUpdater_get_ImageProperties
+#define ISystemMediaTransportControlsDisplayUpdater_CopyFromFileAsync __x_ABI_CWindows_CMedia_CISystemMediaTransportControlsDisplayUpdater_CopyFromFileAsync
+#define ISystemMediaTransportControlsDisplayUpdater_ClearAll __x_ABI_CWindows_CMedia_CISystemMediaTransportControlsDisplayUpdater_ClearAll
+#define ISystemMediaTransportControlsDisplayUpdater_Update __x_ABI_CWindows_CMedia_CISystemMediaTransportControlsDisplayUpdater_Update
+#endif /* WIDL_using_Windows_Media */
+#endif
+
+#endif
+
+#endif  /* ____x_ABI_CWindows_CMedia_CISystemMediaTransportControlsDisplayUpdater_INTERFACE_DEFINED__ */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
+
+/*****************************************************************************
  * ISystemMediaTransportControlsButtonPressedEventArgs interface
  */
 #if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
@@ -1403,6 +2238,38 @@
 #endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
 
 /*
+ * Class Windows.Media.ImageDisplayProperties
+ */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
+#ifndef RUNTIMECLASS_Windows_Media_ImageDisplayProperties_DEFINED
+#define RUNTIMECLASS_Windows_Media_ImageDisplayProperties_DEFINED
+#if !defined(_MSC_VER) && !defined(__MINGW32__)
+static const WCHAR RuntimeClass_Windows_Media_ImageDisplayProperties[] = {'W','i','n','d','o','w','s','.','M','e','d','i','a','.','I','m','a','g','e','D','i','s','p','l','a','y','P','r','o','p','e','r','t','i','e','s',0};
+#elif defined(__GNUC__) && !defined(__cplusplus)
+const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_Media_ImageDisplayProperties[] = L"Windows.Media.ImageDisplayProperties";
+#else
+extern const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_Media_ImageDisplayProperties[] = {'W','i','n','d','o','w','s','.','M','e','d','i','a','.','I','m','a','g','e','D','i','s','p','l','a','y','P','r','o','p','e','r','t','i','e','s',0};
+#endif
+#endif /* RUNTIMECLASS_Windows_Media_ImageDisplayProperties_DEFINED */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
+
+/*
+ * Class Windows.Media.MusicDisplayProperties
+ */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
+#ifndef RUNTIMECLASS_Windows_Media_MusicDisplayProperties_DEFINED
+#define RUNTIMECLASS_Windows_Media_MusicDisplayProperties_DEFINED
+#if !defined(_MSC_VER) && !defined(__MINGW32__)
+static const WCHAR RuntimeClass_Windows_Media_MusicDisplayProperties[] = {'W','i','n','d','o','w','s','.','M','e','d','i','a','.','M','u','s','i','c','D','i','s','p','l','a','y','P','r','o','p','e','r','t','i','e','s',0};
+#elif defined(__GNUC__) && !defined(__cplusplus)
+const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_Media_MusicDisplayProperties[] = L"Windows.Media.MusicDisplayProperties";
+#else
+extern const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_Media_MusicDisplayProperties[] = {'W','i','n','d','o','w','s','.','M','e','d','i','a','.','M','u','s','i','c','D','i','s','p','l','a','y','P','r','o','p','e','r','t','i','e','s',0};
+#endif
+#endif /* RUNTIMECLASS_Windows_Media_MusicDisplayProperties_DEFINED */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
+
+/*
  * Class Windows.Media.SystemMediaTransportControls
  */
 #if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
@@ -1466,6 +2333,22 @@
 #endif /* RUNTIMECLASS_Windows_Media_SystemMediaTransportControlsPropertyChangedEventArgs_DEFINED */
 #endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
 
+/*
+ * Class Windows.Media.VideoDisplayProperties
+ */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
+#ifndef RUNTIMECLASS_Windows_Media_VideoDisplayProperties_DEFINED
+#define RUNTIMECLASS_Windows_Media_VideoDisplayProperties_DEFINED
+#if !defined(_MSC_VER) && !defined(__MINGW32__)
+static const WCHAR RuntimeClass_Windows_Media_VideoDisplayProperties[] = {'W','i','n','d','o','w','s','.','M','e','d','i','a','.','V','i','d','e','o','D','i','s','p','l','a','y','P','r','o','p','e','r','t','i','e','s',0};
+#elif defined(__GNUC__) && !defined(__cplusplus)
+const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_Media_VideoDisplayProperties[] = L"Windows.Media.VideoDisplayProperties";
+#else
+extern const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_Media_VideoDisplayProperties[] = {'W','i','n','d','o','w','s','.','M','e','d','i','a','.','V','i','d','e','o','D','i','s','p','l','a','y','P','r','o','p','e','r','t','i','e','s',0};
+#endif
+#endif /* RUNTIMECLASS_Windows_Media_VideoDisplayProperties_DEFINED */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
+
 /*****************************************************************************
  * IIterable<ABI::Windows::Media::IMediaMarker* > interface
  */
diff --git a/mingw-w64-headers/include/windows.media.idl b/mingw-w64-headers/include/windows.media.idl
index 4896f66..35aa64a 100644
--- a/mingw-w64-headers/include/windows.media.idl
+++ b/mingw-w64-headers/include/windows.media.idl
@@ -22,28 +22,40 @@
 
 import "inspectable.idl";
 import "windows.foundation.idl";
+import "windows.storage.idl";
+import "windows.storage.streams.idl";
 
 namespace Windows.Media
 {
     typedef enum AudioProcessing AudioProcessing;
     typedef enum MediaPlaybackStatus MediaPlaybackStatus;
+    typedef enum MediaPlaybackType MediaPlaybackType;
     typedef enum SoundLevel SoundLevel;
     typedef enum SystemMediaTransportControlsButton SystemMediaTransportControlsButton;
     typedef enum SystemMediaTransportControlsProperty SystemMediaTransportControlsProperty;
 
+    interface IImageDisplayProperties;
     interface IMediaControl;
     interface IMediaMarker;
+    interface IMusicDisplayProperties;
+    interface IMusicDisplayProperties2;
+    interface IMusicDisplayProperties3;
     interface ISystemMediaTransportControls;
     interface ISystemMediaTransportControls2;
     interface ISystemMediaTransportControlsButtonPressedEventArgs;
     interface ISystemMediaTransportControlsDisplayUpdater;
     interface ISystemMediaTransportControlsPropertyChangedEventArgs;
     interface ISystemMediaTransportControlsStatics;
+    interface IVideoDisplayProperties;
+    interface IVideoDisplayProperties2;
 
+    runtimeclass ImageDisplayProperties;
+    runtimeclass MusicDisplayProperties;
     runtimeclass SystemMediaTransportControls;
     runtimeclass SystemMediaTransportControlsButtonPressedEventArgs;
     runtimeclass SystemMediaTransportControlsDisplayUpdater;
     runtimeclass SystemMediaTransportControlsPropertyChangedEventArgs;
+    runtimeclass VideoDisplayProperties;
 
     declare
     {
@@ -79,6 +91,17 @@
     [
         contract(Windows.Foundation.UniversalApiContract, 1.0)
     ]
+    enum MediaPlaybackType
+    {
+        Unknown = 0,
+        Music   = 1,
+        Video   = 2,
+        Image   = 3,
+    };
+
+    [
+        contract(Windows.Foundation.UniversalApiContract, 1.0)
+    ]
     enum SoundLevel
     {
         Muted = 0,
@@ -124,6 +147,35 @@
 
     [
         contract(Windows.Foundation.UniversalApiContract, 1.0),
+        exclusiveto(Windows.Media.MusicDisplayProperties),
+        uuid(6bbf0c59-d0a0-4d26-92a0-f978e1d18e7b)
+    ]
+    interface IMusicDisplayProperties : IInspectable
+    {
+        [propget] HRESULT Title([out, retval] HSTRING *value);
+        [propput] HRESULT Title([in] HSTRING value);
+        [propget] HRESULT AlbumArtist([out, retval] HSTRING *value);
+        [propput] HRESULT AlbumArtist([in] HSTRING value);
+        [propget] HRESULT Artist([out, retval] HSTRING *value);
+        [propput] HRESULT Artist([in] HSTRING value);
+    }
+
+    [
+        contract(Windows.Foundation.UniversalApiContract, 1.0),
+        exclusiveto(Windows.Media.MusicDisplayProperties),
+        uuid(00368462-97d3-44b9-b00f-008afcefaf18)
+    ]
+    interface IMusicDisplayProperties2 : IInspectable
+    {
+        [propget] HRESULT AlbumTitle([out, retval] HSTRING *value);
+        [propput] HRESULT AlbumTitle([in] HSTRING value);
+        [propget] HRESULT TrackNumber([out, retval] UINT32 *value);
+        [propput] HRESULT TrackNumber([in] UINT32 value);
+        [propget] HRESULT Genres([out, retval] Windows.Foundation.Collections.IVector<HSTRING> **value);
+    }
+
+    [
+        contract(Windows.Foundation.UniversalApiContract, 1.0),
         exclusiveto(Windows.Media.SystemMediaTransportControls),
         uuid(99fa3ff4-1742-42a6-902e-087d41f965ec)
     ]
@@ -169,6 +221,30 @@
 
     [
         contract(Windows.Foundation.UniversalApiContract, 1.0),
+        exclusiveto(Windows.Media.SystemMediaTransportControlsDisplayUpdater),
+        uuid(8abbc53e-fa55-4ecf-ad8e-c984e5dd1550)
+    ]
+    interface ISystemMediaTransportControlsDisplayUpdater : IInspectable
+    {
+        [propget] HRESULT Type([out, retval] Windows.Media.MediaPlaybackType *value);
+        [propput] HRESULT Type([in] Windows.Media.MediaPlaybackType value);
+        [propget] HRESULT AppMediaId([out, retval] HSTRING *value);
+        [propput] HRESULT AppMediaId([in] HSTRING value);
+        [propget] HRESULT Thumbnail([out, retval] Windows.Storage.Streams.RandomAccessStreamReference **value);
+        [propput] HRESULT Thumbnail([in] Windows.Storage.Streams.RandomAccessStreamReference *value);
+        [propget] HRESULT MusicProperties([out, retval] Windows.Media.MusicDisplayProperties **value);
+        [propget] HRESULT VideoProperties([out, retval] Windows.Media.VideoDisplayProperties **value);
+        [propget] HRESULT ImageProperties([out, retval] Windows.Media.ImageDisplayProperties **value);
+        HRESULT CopyFromFileAsync(
+            [in] Windows.Media.MediaPlaybackType type, [in] Windows.Storage.StorageFile *source,
+            [out, retval] Windows.Foundation.IAsyncOperation<boolean> **operation
+        );
+        HRESULT ClearAll();
+        HRESULT Update();
+    }
+
+    [
+        contract(Windows.Foundation.UniversalApiContract, 1.0),
         exclusiveto(Windows.Media.SystemMediaTransportControlsButtonPressedEventArgs),
         uuid(b7f47116-a56f-4dc8-9e11-92031f4a87c2)
     ]
@@ -190,6 +266,28 @@
     [
         contract(Windows.Foundation.UniversalApiContract, 1.0),
         marshaling_behavior(agile),
+        threading(both)
+    ]
+    runtimeclass ImageDisplayProperties
+    {
+        [default] interface Windows.Media.IImageDisplayProperties;
+    }
+
+    [
+        contract(Windows.Foundation.UniversalApiContract, 1.0),
+        marshaling_behavior(agile),
+        threading(both)
+    ]
+    runtimeclass MusicDisplayProperties
+    {
+        [default] interface Windows.Media.IMusicDisplayProperties;
+        [contract(Windows.Foundation.UniversalApiContract, 1.0)] interface Windows.Media.IMusicDisplayProperties2;
+        [contract(Windows.Foundation.UniversalApiContract, 3.0)] interface Windows.Media.IMusicDisplayProperties3;
+    }
+
+    [
+        contract(Windows.Foundation.UniversalApiContract, 1.0),
+        marshaling_behavior(agile),
         static(Windows.Media.ISystemMediaTransportControlsStatics, Windows.Foundation.UniversalApiContract, 1.0),
         threading(mta)
     ]
@@ -226,4 +324,15 @@
     {
         [default] interface Windows.Media.ISystemMediaTransportControlsPropertyChangedEventArgs;
     }
+
+    [
+        contract(Windows.Foundation.UniversalApiContract, 1.0),
+        marshaling_behavior(agile),
+        threading(both)
+    ]
+    runtimeclass VideoDisplayProperties
+    {
+        [default] interface Windows.Media.IVideoDisplayProperties;
+        [contract(Windows.Foundation.UniversalApiContract, 1.0)] interface Windows.Media.IVideoDisplayProperties2;
+    }
 }
diff --git a/mingw-w64-headers/include/windows.media.render.h b/mingw-w64-headers/include/windows.media.render.h
index 457bb09..99114fb 100644
--- a/mingw-w64-headers/include/windows.media.render.h
+++ b/mingw-w64-headers/include/windows.media.render.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/windows.media.render.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/windows.media.render.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.media.speechrecognition.h b/mingw-w64-headers/include/windows.media.speechrecognition.h
index ac6e28f..9abd39b 100644
--- a/mingw-w64-headers/include/windows.media.speechrecognition.h
+++ b/mingw-w64-headers/include/windows.media.speechrecognition.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/windows.media.speechrecognition.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/windows.media.speechrecognition.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.media.speechsynthesis.h b/mingw-w64-headers/include/windows.media.speechsynthesis.h
index 090fb8d..882ea88 100644
--- a/mingw-w64-headers/include/windows.media.speechsynthesis.h
+++ b/mingw-w64-headers/include/windows.media.speechsynthesis.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/windows.media.speechsynthesis.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/windows.media.speechsynthesis.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.networking.connectivity.h b/mingw-w64-headers/include/windows.networking.connectivity.h
index 00a710b..5d7b8e7 100644
--- a/mingw-w64-headers/include/windows.networking.connectivity.h
+++ b/mingw-w64-headers/include/windows.networking.connectivity.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/windows.networking.connectivity.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/windows.networking.connectivity.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.networking.h b/mingw-w64-headers/include/windows.networking.h
index b80da65..d47282b 100644
--- a/mingw-w64-headers/include/windows.networking.h
+++ b/mingw-w64-headers/include/windows.networking.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/windows.networking.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/windows.networking.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.perception.spatial.h b/mingw-w64-headers/include/windows.perception.spatial.h
index ca7bdf3..400b5fa 100644
--- a/mingw-w64-headers/include/windows.perception.spatial.h
+++ b/mingw-w64-headers/include/windows.perception.spatial.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/windows.perception.spatial.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/windows.perception.spatial.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.perception.spatial.surfaces.h b/mingw-w64-headers/include/windows.perception.spatial.surfaces.h
index 1f901b5..17deaef 100644
--- a/mingw-w64-headers/include/windows.perception.spatial.surfaces.h
+++ b/mingw-w64-headers/include/windows.perception.spatial.surfaces.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/windows.perception.spatial.surfaces.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/windows.perception.spatial.surfaces.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.security.credentials.h b/mingw-w64-headers/include/windows.security.credentials.h
index d6c978b..f8bff3f 100644
--- a/mingw-w64-headers/include/windows.security.credentials.h
+++ b/mingw-w64-headers/include/windows.security.credentials.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/windows.security.credentials.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/windows.security.credentials.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.security.credentials.ui.h b/mingw-w64-headers/include/windows.security.credentials.ui.h
index c1d4709..3cf4fb2 100644
--- a/mingw-w64-headers/include/windows.security.credentials.ui.h
+++ b/mingw-w64-headers/include/windows.security.credentials.ui.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/windows.security.credentials.ui.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/windows.security.credentials.ui.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.security.cryptography.h b/mingw-w64-headers/include/windows.security.cryptography.h
index 6cfc9c1..7b2de6a 100644
--- a/mingw-w64-headers/include/windows.security.cryptography.h
+++ b/mingw-w64-headers/include/windows.security.cryptography.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/windows.security.cryptography.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/windows.security.cryptography.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.security.isolation.h b/mingw-w64-headers/include/windows.security.isolation.h
index bd3da0b..33c72a9 100644
--- a/mingw-w64-headers/include/windows.security.isolation.h
+++ b/mingw-w64-headers/include/windows.security.isolation.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/windows.security.isolation.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/windows.security.isolation.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.storage.fileproperties.h b/mingw-w64-headers/include/windows.storage.fileproperties.h
index 43866ce..0372193 100644
--- a/mingw-w64-headers/include/windows.storage.fileproperties.h
+++ b/mingw-w64-headers/include/windows.storage.fileproperties.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/windows.storage.fileproperties.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/windows.storage.fileproperties.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.storage.h b/mingw-w64-headers/include/windows.storage.h
index 9493b29..97a6acc 100644
--- a/mingw-w64-headers/include/windows.storage.h
+++ b/mingw-w64-headers/include/windows.storage.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/windows.storage.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/windows.storage.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.storage.search.h b/mingw-w64-headers/include/windows.storage.search.h
index d774a77..1d8974f 100644
--- a/mingw-w64-headers/include/windows.storage.search.h
+++ b/mingw-w64-headers/include/windows.storage.search.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/windows.storage.search.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/windows.storage.search.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.storage.streams.h b/mingw-w64-headers/include/windows.storage.streams.h
index 4f33131..05a7872 100644
--- a/mingw-w64-headers/include/windows.storage.streams.h
+++ b/mingw-w64-headers/include/windows.storage.streams.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/windows.storage.streams.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/windows.storage.streams.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.system.h b/mingw-w64-headers/include/windows.system.h
index 6b98ace..c79a973 100644
--- a/mingw-w64-headers/include/windows.system.h
+++ b/mingw-w64-headers/include/windows.system.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/windows.system.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/windows.system.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.system.power.h b/mingw-w64-headers/include/windows.system.power.h
index 1d2ab93..f62dc03 100644
--- a/mingw-w64-headers/include/windows.system.power.h
+++ b/mingw-w64-headers/include/windows.system.power.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/windows.system.power.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/windows.system.power.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.system.profile.systemmanufacturers.h b/mingw-w64-headers/include/windows.system.profile.systemmanufacturers.h
index a0b6b3d..293b63e 100644
--- a/mingw-w64-headers/include/windows.system.profile.systemmanufacturers.h
+++ b/mingw-w64-headers/include/windows.system.profile.systemmanufacturers.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/windows.system.profile.systemmanufacturers.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/windows.system.profile.systemmanufacturers.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.system.threading.h b/mingw-w64-headers/include/windows.system.threading.h
index 304e4b9..dd6db29 100644
--- a/mingw-w64-headers/include/windows.system.threading.h
+++ b/mingw-w64-headers/include/windows.system.threading.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/windows.system.threading.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/windows.system.threading.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.system.userprofile.h b/mingw-w64-headers/include/windows.system.userprofile.h
index b123614..1501ce4 100644
--- a/mingw-w64-headers/include/windows.system.userprofile.h
+++ b/mingw-w64-headers/include/windows.system.userprofile.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/windows.system.userprofile.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/windows.system.userprofile.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.ui.composition.h b/mingw-w64-headers/include/windows.ui.composition.h
index 9b8d8b2..bc1f590 100644
--- a/mingw-w64-headers/include/windows.ui.composition.h
+++ b/mingw-w64-headers/include/windows.ui.composition.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/windows.ui.composition.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/windows.ui.composition.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.ui.composition.interop.h b/mingw-w64-headers/include/windows.ui.composition.interop.h
index 314a1d1..8a98330 100644
--- a/mingw-w64-headers/include/windows.ui.composition.interop.h
+++ b/mingw-w64-headers/include/windows.ui.composition.interop.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/windows.ui.composition.interop.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/windows.ui.composition.interop.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.ui.core.h b/mingw-w64-headers/include/windows.ui.core.h
index 45c40eb..f404263 100644
--- a/mingw-w64-headers/include/windows.ui.core.h
+++ b/mingw-w64-headers/include/windows.ui.core.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/windows.ui.core.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/windows.ui.core.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.ui.h b/mingw-w64-headers/include/windows.ui.h
index 226c0c3..51254fa 100644
--- a/mingw-w64-headers/include/windows.ui.h
+++ b/mingw-w64-headers/include/windows.ui.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/windows.ui.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/windows.ui.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.ui.viewmanagement.h b/mingw-w64-headers/include/windows.ui.viewmanagement.h
index addca66..4e07e9e 100644
--- a/mingw-w64-headers/include/windows.ui.viewmanagement.h
+++ b/mingw-w64-headers/include/windows.ui.viewmanagement.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/windows.ui.viewmanagement.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/windows.ui.viewmanagement.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.ui.xaml.hosting.desktopwindowxamlsource.h b/mingw-w64-headers/include/windows.ui.xaml.hosting.desktopwindowxamlsource.h
index 0725b5d..e82e415 100644
--- a/mingw-w64-headers/include/windows.ui.xaml.hosting.desktopwindowxamlsource.h
+++ b/mingw-w64-headers/include/windows.ui.xaml.hosting.desktopwindowxamlsource.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/windows.ui.xaml.hosting.desktopwindowxamlsource.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/windows.ui.xaml.hosting.desktopwindowxamlsource.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windowscontracts.h b/mingw-w64-headers/include/windowscontracts.h
index 9884b2c..8a5c528 100644
--- a/mingw-w64-headers/include/windowscontracts.h
+++ b/mingw-w64-headers/include/windowscontracts.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/windowscontracts.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/windowscontracts.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/wmcodecdsp.h b/mingw-w64-headers/include/wmcodecdsp.h
index 8906203..2b50d80 100644
--- a/mingw-w64-headers/include/wmcodecdsp.h
+++ b/mingw-w64-headers/include/wmcodecdsp.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/wmcodecdsp.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/wmcodecdsp.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/wmcontainer.h b/mingw-w64-headers/include/wmcontainer.h
index 893afd0..aeb81ff 100644
--- a/mingw-w64-headers/include/wmcontainer.h
+++ b/mingw-w64-headers/include/wmcontainer.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/wmcontainer.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/wmcontainer.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/wmdrmsdk.h b/mingw-w64-headers/include/wmdrmsdk.h
index d06e8b5..4cf1fcd 100644
--- a/mingw-w64-headers/include/wmdrmsdk.h
+++ b/mingw-w64-headers/include/wmdrmsdk.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/wmdrmsdk.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/wmdrmsdk.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/wmp.h b/mingw-w64-headers/include/wmp.h
index aa49147..55cdac9 100644
--- a/mingw-w64-headers/include/wmp.h
+++ b/mingw-w64-headers/include/wmp.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/wmp.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/wmp.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/wmprealestate.h b/mingw-w64-headers/include/wmprealestate.h
index 3449634..23cc77f 100644
--- a/mingw-w64-headers/include/wmprealestate.h
+++ b/mingw-w64-headers/include/wmprealestate.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/wmprealestate.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/wmprealestate.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/wmpservices.h b/mingw-w64-headers/include/wmpservices.h
index 4ca634d..6670476 100644
--- a/mingw-w64-headers/include/wmpservices.h
+++ b/mingw-w64-headers/include/wmpservices.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/wmpservices.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/wmpservices.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/wmsbuffer.h b/mingw-w64-headers/include/wmsbuffer.h
index d178858..fd6b34c 100644
--- a/mingw-w64-headers/include/wmsbuffer.h
+++ b/mingw-w64-headers/include/wmsbuffer.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/wmsbuffer.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/wmsbuffer.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/wmsdkidl.h b/mingw-w64-headers/include/wmsdkidl.h
index 02dbc99..7d4cf31 100644
--- a/mingw-w64-headers/include/wmsdkidl.h
+++ b/mingw-w64-headers/include/wmsdkidl.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/wmsdkidl.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/wmsdkidl.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/wmsecure.h b/mingw-w64-headers/include/wmsecure.h
index 7967bb5..5d45c79 100644
--- a/mingw-w64-headers/include/wmsecure.h
+++ b/mingw-w64-headers/include/wmsecure.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/wmsecure.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/wmsecure.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/wpcapi.h b/mingw-w64-headers/include/wpcapi.h
index 93e7601..444d3b8 100644
--- a/mingw-w64-headers/include/wpcapi.h
+++ b/mingw-w64-headers/include/wpcapi.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/wpcapi.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/wpcapi.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/wsdattachment.h b/mingw-w64-headers/include/wsdattachment.h
index 8f9ad2d..f43bd66 100644
--- a/mingw-w64-headers/include/wsdattachment.h
+++ b/mingw-w64-headers/include/wsdattachment.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/wsdattachment.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/wsdattachment.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/wsdbase.h b/mingw-w64-headers/include/wsdbase.h
index d17928a..ce50a2b 100644
--- a/mingw-w64-headers/include/wsdbase.h
+++ b/mingw-w64-headers/include/wsdbase.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/wsdbase.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/wsdbase.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/wsdclient.h b/mingw-w64-headers/include/wsdclient.h
index 51785a9..bd5c806 100644
--- a/mingw-w64-headers/include/wsdclient.h
+++ b/mingw-w64-headers/include/wsdclient.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/wsdclient.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/wsdclient.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/wsddisco.h b/mingw-w64-headers/include/wsddisco.h
index 1fc8cc0..aa2080c 100644
--- a/mingw-w64-headers/include/wsddisco.h
+++ b/mingw-w64-headers/include/wsddisco.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/wsddisco.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/wsddisco.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/wsdhost.h b/mingw-w64-headers/include/wsdhost.h
index e6619b3..b89ce92 100644
--- a/mingw-w64-headers/include/wsdhost.h
+++ b/mingw-w64-headers/include/wsdhost.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/wsdhost.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/wsdhost.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/wsdxml.h b/mingw-w64-headers/include/wsdxml.h
index 20f5acf..740ba77 100644
--- a/mingw-w64-headers/include/wsdxml.h
+++ b/mingw-w64-headers/include/wsdxml.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/wsdxml.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/wsdxml.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/wsmandisp.h b/mingw-w64-headers/include/wsmandisp.h
index 2a907a8..29a355e 100644
--- a/mingw-w64-headers/include/wsmandisp.h
+++ b/mingw-w64-headers/include/wsmandisp.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/wsmandisp.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/wsmandisp.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/wtypes.h b/mingw-w64-headers/include/wtypes.h
index e7bce35..7e28ac5 100644
--- a/mingw-w64-headers/include/wtypes.h
+++ b/mingw-w64-headers/include/wtypes.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/wtypes.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/wtypes.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/wtypesbase.h b/mingw-w64-headers/include/wtypesbase.h
index fd5dcd2..70bfd20 100644
--- a/mingw-w64-headers/include/wtypesbase.h
+++ b/mingw-w64-headers/include/wtypesbase.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/wtypesbase.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/wtypesbase.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/wuapi.h b/mingw-w64-headers/include/wuapi.h
index 3a8ee51..0160e19 100644
--- a/mingw-w64-headers/include/wuapi.h
+++ b/mingw-w64-headers/include/wuapi.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/wuapi.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/wuapi.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/xamlom.h b/mingw-w64-headers/include/xamlom.h
index 63161e7..5c02c58 100644
--- a/mingw-w64-headers/include/xamlom.h
+++ b/mingw-w64-headers/include/xamlom.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/xamlom.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/xamlom.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/xapo.h b/mingw-w64-headers/include/xapo.h
index 72bd59c..d9d1d91 100644
--- a/mingw-w64-headers/include/xapo.h
+++ b/mingw-w64-headers/include/xapo.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/xapo.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/xapo.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/xaudio2.h b/mingw-w64-headers/include/xaudio2.h
index 10629ae..c460779 100644
--- a/mingw-w64-headers/include/xaudio2.h
+++ b/mingw-w64-headers/include/xaudio2.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/xaudio2.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/xaudio2.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/xaudio2fx.h b/mingw-w64-headers/include/xaudio2fx.h
index ff13ada..40708d9 100644
--- a/mingw-w64-headers/include/xaudio2fx.h
+++ b/mingw-w64-headers/include/xaudio2fx.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/xaudio2fx.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/xaudio2fx.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/xmllite.h b/mingw-w64-headers/include/xmllite.h
index 28df1bc..c47adaa 100644
--- a/mingw-w64-headers/include/xmllite.h
+++ b/mingw-w64-headers/include/xmllite.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/xmllite.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/xmllite.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/xpsdigitalsignature.h b/mingw-w64-headers/include/xpsdigitalsignature.h
index 79f12dc..2c2d217 100644
--- a/mingw-w64-headers/include/xpsdigitalsignature.h
+++ b/mingw-w64-headers/include/xpsdigitalsignature.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/xpsdigitalsignature.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/xpsdigitalsignature.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/xpsobjectmodel.h b/mingw-w64-headers/include/xpsobjectmodel.h
index 42acde8..3c62e88 100644
--- a/mingw-w64-headers/include/xpsobjectmodel.h
+++ b/mingw-w64-headers/include/xpsobjectmodel.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/xpsobjectmodel.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/xpsobjectmodel.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/xpsobjectmodel_1.h b/mingw-w64-headers/include/xpsobjectmodel_1.h
index dda2502..2d28c78 100644
--- a/mingw-w64-headers/include/xpsobjectmodel_1.h
+++ b/mingw-w64-headers/include/xpsobjectmodel_1.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/xpsobjectmodel_1.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/xpsobjectmodel_1.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/xpsprint.h b/mingw-w64-headers/include/xpsprint.h
index 7ea5e89..87777fa 100644
--- a/mingw-w64-headers/include/xpsprint.h
+++ b/mingw-w64-headers/include/xpsprint.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/xpsprint.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/xpsprint.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/xpsrassvc.h b/mingw-w64-headers/include/xpsrassvc.h
index 7e637e8..97bbec3 100644
--- a/mingw-w64-headers/include/xpsrassvc.h
+++ b/mingw-w64-headers/include/xpsrassvc.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 8.17 from include/xpsrassvc.idl - Do not edit ***/
+/*** Autogenerated by WIDL 8.19 from include/xpsrassvc.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/wine-import.sh b/mingw-w64-headers/wine-import.sh
index 47ab427..71fef43 100755
--- a/mingw-w64-headers/wine-import.sh
+++ b/mingw-w64-headers/wine-import.sh
@@ -51,9 +51,7 @@
 	corerror.h \
 	d2dbasetypes.h \
 	d3d10_1shader.h \
-	d3d10effect.h \
 	d3d10misc.h \
-	d3d10shader.h \
 	d3d11shader.h \
 	d3d8caps.h \
 	d3d8.h \
@@ -146,7 +144,9 @@
 	ctxtcall \
 	d3d10 \
 	d3d10_1 \
+	d3d10effect \
 	d3d10sdklayers \
+	d3d10shader \
 	d3d11 \
 	d3d11on12 \
 	d3d11_1 \
